小编Ale*_*osa的帖子

我书中的位字段结构的大小不准确

我正在研究C语言的基础知识.我用位字段到达了结构章节.本书展示了一个包含两种不同类型数据的结构示例:各种bool和各种无符号整数.

该书声明该结构的大小为16位,并且在不使用填充的情况下,该结构将测量10位.

这是本书在示例中使用的结构:

#include <stdio.h>
#include <stdbool.h>

struct test{

       bool opaque                 : 1;
       unsigned int fill_color     : 3;
       unsigned int                : 4;
       bool show_border            : 1;
       unsigned int border_color   : 3;
       unsigned int border_style   : 2;
       unsigned int                : 2;
};

int main(void)
{
       struct test Test;

       printf("%zu\n", sizeof(Test));

       return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么在我的编译器上使用填充完全相同的结构测量16 个字节(而不是位)而没有填充的16个字节?

我正在使用

GCC (tdm-1) 4.9.2 compiler;
Code::Blocks as IDE.
Windows 7 64 Bit
Intel CPU 64 bit
Run Code Online (Sandbox Code Playgroud)

这是我得到的结果:

在此输入图像描述

这是一个示例页面的图片:

在此输入图像描述

c gcc struct field bit

23
推荐指数
5
解决办法
2129
查看次数

C-文件输入/输出缓冲区和setvbuf()

在C语言中,fopen()是否真的创建了两个缓冲区,一个用于输入,另一个用于输出?

这就是我的C书所说的:

通常,使用标准I/O的第一步是使用f open()打开文件.(回想一下,stdin,stdout和stderr文件是自动打开的.)fopen()函数不仅打开一个文件,而且设置一个缓冲区(两个缓冲区用于读写模式),并设置一个数据包含有关文件和数据的数据的结构

如果使用fopen()打开文件,则会创建两个缓冲区,处于写入模式,如"a +",即读取和写入

FILE * fp = fopen ("file.txt", "a +");
setvbuf (destination_file, NULL, _IOFBF, BUFFER_SIZE);
Run Code Online (Sandbox Code Playgroud)

setvbuf()函数引用了什么缓冲区?

c buffer file stdio

6
推荐指数
1
解决办法
244
查看次数

C-什么是C实现?

您能否从三个突出显示的表达式中得到启发,来解释一下到底是什么实现?

来自“ C Primer Plus”>语言标准

当前,许多C实现可用。理想情况下,编写C程序时,只要不使用特定于计算机的编程,它就可以在任何实现上都可以工作。为了在实践中做到这一点,不同的实现需要符合公认的标准

c implementation

3
推荐指数
2
解决办法
192
查看次数

标签 统计

c ×3

bit ×1

buffer ×1

field ×1

file ×1

gcc ×1

implementation ×1

stdio ×1

struct ×1