这个for循环发生了什么

Whats happening in this for loop

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 中的第一条语句不需要是赋值,它只是构建为 succinct/readable 循环一组值的方式。您可以将 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++ ){ /* ... */ }