首页 > 解决方案 > 是否可以使用具有误导性语法的 for 循环?

问题描述

for循环的语法:

for(initialization;condition;increment/decrement){
statements;
}

为什么下面的代码运行无限次,然后为什么没有语法错误?

int x=10;
for(x++;x++;x++){
printf("\n %d",x);
}

标签: cloopsfor-loopoperatorspost-increment

解决方案


为什么下面的代码运行无限次......?

因为使用的条件不会阻止它执行,因为它通常永远不会评估为0.

x在每次迭代中递增两次,直到达到宏INT_MAX( limits.h) 中定义的值。在那之后,递增x调用未定义的行为

...然后为什么没有语法错误?

x++是一个有效条件,编译器不会检查您设置为条件的表达式是否有意义。它只检查语法错误。所以程序可以编译,运行时,循环是无限的。

所以回答:

是否可以使用具有误导性语法的 for 循环?

答案是:是的。但在这种情况下,它会在某些时候调用上面所说的未定义行为。


推荐阅读