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