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'不会在第二个变化?它仍然是x.a3 = -1。结构变量未被赋值改变
and
如果我输入'x.a3 = 1;'在第一个如果,它仍然x.a3 = = 1!它并没有改变!
'void main()'是一个无效的签名。最小签名是'int main(void)'。什么是'x'?代码不能编译。提供[mcve]。 – Olaf
@Olaf在阅读C11 5.1.2.2.1 2时,“它应该用int的返回类型或其他实现定义的方式来定义。” 'void main(void)'是实现定义的,如果它是有效的,当然不是无效的。我想这取决于“或”。 IAC,当然不是OP的关键问题。 – chux
@chux:这是受解释。除此之外,所有的全尺寸操作系统都需要一个“int”结果。 – Olaf