【发布时间】:2016-12-06 07:03:20
【问题描述】:
做什么
for(;i;)
和
for(;;)
在c编程中是什么意思?
for(;i;)
printf("hjj");
上面的程序发生了什么?
int i=1;
for(;;)
编译器会进入循环吗?
【问题讨论】:
做什么
for(;i;)
和
for(;;)
在c编程中是什么意思?
for(;i;)
printf("hjj");
上面的程序发生了什么?
int i=1;
for(;;)
编译器会进入循环吗?
【问题讨论】:
for(;;) 是一个无限循环。当i 的值变为0 时,for(;i;) 将终止。
在你的情况下,
int i=1;
for(;;)
for 将是一个无限循环,直到内部块跳出循环。
【讨论】:
让我们分解for 语句(参见C standard 6.8.5.3):
for ( clause-1 ; expression-2 ; expression-3 ) statement
在
for(;;)
您省略了初始化语句 (clause-1) 和循环体表达式 (expression-3),我假设您很清楚这些只是没有操作。
控制部分是中间的,expression-2。此表达式在每次迭代开始时被评估为真或假。如果计算结果为真,则执行下一次迭代。现在我回到the standard:
"省略的表达式 2 被一个非零常量替换。"
您可能知道,“非零常数”在布尔上下文中的计算结果为真。因此:
for (;;)
等价于到:
while (1)
所以循环将继续迭代,一个无限循环,除非break被执行或外部中断(如<CTRL>C)介入。
所以,更进一步:
for(;i;)
取决于i 的值。如果i 不为零,那么您将再次进入无限循环,但如果i 为零(假),则循环根本不会迭代。
【讨论】: