我正在研究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语言中,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 Primer Plus”>语言标准
当前,许多C实现可用。理想情况下,编写C程序时,只要不使用特定于计算机的编程,它就可以在任何实现上都可以工作。为了在实践中做到这一点,不同的实现需要符合公认的标准。