C-for循环怪异

时间:2016-12-06 07:03:20

标签: c for-loop

是什么

for(;i;) 

for(;;) 

在c编程中意味着什么?

for(;i;)
printf("hjj");

上述程序会发生什么?

int i=1;
for(;;)

编译器是否会进入循环?

2 个答案:

答案 0 :(得分:4)

for(;;)是一个无限循环。当for(;i;)的值变为i时,0将终止。

在你的情况下,

int i=1;
for(;;)

for将是一个无限循环,直到内部块突破循环。

答案 1 :(得分:1)

让我们分解for语句(参见C standard 6.8.5.3):

for ( clause-1 ; expression-2 ; expression-3 ) statement

in

for(;;)

你省略了初始化语句( clause-1 )和循环体表达式( expression-3 ),我假设你很清楚这些意思只是没有操作。

控制部分是中间的,表达式-2 。在每次迭代开始时,此表达式的计算结果为true或false。如果它的计算结果为true,则执行下一次迭代。现在我回到the standard

省略的表达式-2被非零常量替换。

您可能知道,“非零常量”在布尔上下文中的计算结果为true。因此:

for (;;)

等同于

while (1)

所以循环将继续迭代,一个无限循环,除非执行break或外部中断(如<CTRL>C)介入。

所以,更进一步:

for(;i;)

取决于i的值。如果i非零,则您再次有一个无限循环,但如果i为零(false),则循环将不会迭代。