【发布时间】:2017-04-17 13:47:40
【问题描述】:
struct st
{
int a1 : 3;
int a2 : 2;
int a3 : 1;
}
void main(void)
{
x.a3 = -1;
if (x.a3 == -1) printf("TRUE\n");
else printf("FALSE\n");
x.a3 = 1;
if (x.a3 == 1) printf("TRUE\n");
else printf("FALSE\n");
}
万一,'x.a3 = -1;'首先如果是TRUE。
但是,为什么 'x.a3 = 1' 在第二个 if 没有改变?它仍然是 x.a3 = -1。
和
如果我先输入 'x.a3 = 1;' ,它仍然是 x.a3 = = 1 !没变!
【问题讨论】:
-
void main()是无效签名。最小签名是int main(void)。x是什么?代码无法编译。提供minimal reproducible example。 -
@Olaf 当我阅读 C11 5.1.2.2.1 2 时,“它应该使用 int 的返回类型来定义......或以其他一些实现定义的方式。”
void main(void)如果有效,则由实现定义,不一定无效。我想这取决于“或”。 IAC,当然不是 OP 的关键问题。 -
@chux:这有待解释。除此之外,所有全尺寸操作系统都需要
int结果。
标签: c struct signed bit-fields twos-complement