c - 这个for循环发生了什么

标签 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;
}

最佳答案

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

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

    ch++;
}

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

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

关于c - 这个for循环发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43645409/

相关文章:

c - 为什么 printf 可以工作,而 scanf 却不能?

python - 与用户输入的数字比较总是产生 "not equal"结果

c - C中的位图图像输出

"Do"循环中的 PHP "For"循环

javascript - 哪个更有效率? (JavaScript 循环的变量)

java - 如何使用 if 语句或 for 循环设置枚举?

c++ - “is not required” ==未定义行为?

c++ - 迁移到VS2013比较运算符错误C2678 :binary '==' no operator

sql - 可以加速这个算法吗?

对不同文件模式的混淆