最近一个问题的答案for(;;){}
loops (for (;;) 循环的作用是什么)似乎没有回答我的问题,所以我想我会尝试稍微完善一下问题。特别是,除了知道for
没有条件的循环是无限循环,我想知道为什么它们是无限循环。
在声明中for (;_;){}
, the _
是一个条件表达式。我的第一个猜测是空表达式可能会计算为0
or NULL
。但如果你测试:
for (;;){}
正如每个人都指出的那样,这是一个无限循环。
for (;1;){}
是一个无限循环。
但这些循环体根本不执行:
for (;0;){}
for (;NULL;){}
因此,空条件表达式似乎不会计算为0
or NULL
.
所以,我的问题是:for (;;){}
循环是 C 计算表达式的方式的产物,或者它只是一个特殊的实现定义的情况,因为从不执行的循环体不是很有用?
更新:
阅读评论和答案后,我意识到我的问题并没有想象的那么清晰。我认为这个问题有两个方面:
的行为是for(;;){}
循环严格是 C 一般评估表达式的方式的结果,或者此行为特定于 C 评估的方式for
声明?
为什么选择这种行为for
循环缺少条件表达式?
C 和 C++ 都保证了这种行为。
[C99: 6.8.5.3/1]:
Both clause-1 and 表达式-3可以省略。省略了一个表达式-2被替换为非零常数。
[C++14: 6.5.3/1]:
The for
陈述
for ( for-init-statement conditionopt; expressionopt) statement
相当于
{
for-init-statement
while ( condition ) {
statement
expression ;
}
}
[..]
[C++14: 6.5.3/2]:
条件和表达式中的一个或两个都可以省略。缺失的条件使得隐含的while
子句相当于while(true)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)