考虑以下代码,
int i;
while(i=0)
printf("Hello");
Run Code Online (Sandbox Code Playgroud)
现在,一般而言,我= 0是一个assignment,而不是condition用于while检查.但GCC编译器允许它带有警告,甚至可以正确评估它(不执行print语句).
为什么?我通常会用括号来表示真值,但是我的后辈觉得我错了,这里的括号没有真正的理由!
编辑:对"实际"疑问进行归零,请考虑以下测试用例
int callme(){
return 0;
}
int main(int argc,char*argv[]){
int c;
while(c = callme()){
printf("Calling...\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
表达式i = 0做了两件事:
i我通常会用括号来表示真值,但我的小辈们觉得我错了,这里的括号没有真正的理由
这通常是对编译器意味着"我真的想要这个,我没有忘记一个=,闭嘴" 的暗示.
对于你的具体情况,没有理由写if (i = 0):你已经知道if(0)是做什么的.但它用作以下内容时非常有用:
if ((i = some_function()))
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2399 次 |
| 最近记录: |