2017-04-26 76 views
0

for循环的第一个语句中发生了什么?我似乎无法围绕为什么1 == 2将被接受,因为它是一个比较而不是值赋值。此循环中发生了什么

char ch = 120; 
unsigned char x = 1; 
unsigned int y = 1; 
for(1 == 2; ch > 0; ch++) { 
    printf("%d\n", ch); 
    x <<= 1; 
    y *= 2; 
} 
+0

欢迎来到Stack Overflow。 请注意,在这里说'谢谢'的首选方式是通过 提高投票的好问题和有用的答案(一旦你有足够的声誉这样做),并接受任何 问题最有用的答案,你问(这也给你一个小小的提升,以你的声望 )。 请参阅[关于]页面,以及[如何在此处提问 ?]和 [当有人回答我的 问题时,我该怎么办? ?](http://stackoverflow.com/help/someone-answers) –

回答

3

这只是一个无用的声明,编译器会优化掉。 for中的第一条语句不需要作为赋值,它只是构建为循环一组值的简洁/可读的方式。您可以展开for环路成while,它可能更清楚:

1 == 2; // does nothing, likely emits compiler warning. 
while(ch > 0) 
{ 
    printf("%d\n", ch); 
    x <<= 1; 
    y *= 2 

    ch++; 
} 

如果你想使用一个for循环后迭代的表达,但已经初始化的变量,你可以使用空语句第一个表达式:

for(; ch > 0; ch++){ /* ... */ }