考虑以下代码,
int i;
while(i=0)
printf("Hello");
现在一般来说 i=0 是一个assignment
而不是一个condition
检查while
。但是GCC
编译器让它发出警告,甚至正确评估它(不执行打印语句)。
为什么?我通常会为真值加上括号,但我的后辈们觉得我错了,括号里的括号没有真正的理由!
编辑:归零“实际”疑问,请考虑以下测试用例
int callme(){
return 0;
}
int main(int argc,char*argv[]){
int c;
while(c = callme()){
printf("Calling...\n");
}
return 0;
}