aut*_*tic 3 c c99 bit-fields c11
结构或联合的成员可以具有除可变修改类型之外的任何完整对象类型.另外,可以声明成员由指定数量的位组成(包括符号位,如果有的话).这样的成员称为位域; 124)其宽度前面有冒号.
我是否正确理解这表明单个成员struct { int bit:1; }可能是一个符号位?
如果是这种情况,则遵循这样的位字段可能存储在某些实现上的唯一值是,0并且-0其中-0可能与0一旦存储或陷阱表示无法区分.
是否有任何实际的实现只能将一个值分配给这样的位域?
gcc 4.9.2怎么样?
/* gcc -std=c11 -pedantic-errors -Wextra -Werror=all test.c */
#include <stdio.h>
#include <string.h>
struct foo {
int bit:1;
};
int main() {
struct foo f;
f.bit = 0;
f.bit = 1;
printf("%i\n", f.bit);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译它会发出:
$ gcc -std=c11 -pedantic-errors -Wextra -Werror=all test.c
test.c: In function ‘main’: test.c:12:10: warning: overflow in
implicit constant conversion [-Woverflow]
f.bit = 1;
^
Run Code Online (Sandbox Code Playgroud)
运行它发出:
$ ./a.out
-1
Run Code Online (Sandbox Code Playgroud)