在这个for循环中发生了什么

时间:2017-04-26 22:15:04

标签: c for-loop comparison-operators

在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;
}

1 个答案:

答案 0 :(得分:3)

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

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

    ch++;
}

如果要为post迭代表达式使用for循环但已经初始化了变量,可以使用null语句作为第一个表达式:

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