ex *_*ilo 6 c for-loop language-lawyer
关于for(;;){}循环的最近问题的答案(对于(;;)循环做什么)似乎没有回答我的问题,所以我认为我会尝试稍微改进一下这个问题.特别是,除了知道for没有条件的循环是无限循环之外,我想知道为什么它们是无限循环.
在语句中for (;_;){},_是一个条件表达式.我的第一个猜测是空表达式可能会评估为0或NULL.但如果你测试:
for (;;){}
Run Code Online (Sandbox Code Playgroud)
每个人都指出,这是一个无限循环.
for (;1;){}
Run Code Online (Sandbox Code Playgroud)
是一个无限循环.
但是这些循环体都没有执行:
for (;0;){}
for (;NULL;){}
Run Code Online (Sandbox Code Playgroud)
因此,空条件表达式似乎不会评估为0或NULL.
所以,我的问题是:for (;;){}循环的行为是C计算表达式的方式的工件,还是只是一个特殊的实现定义的情况,因为从不执行的循环体不是很有用?
更新:在阅读了评论和答案之后,我意识到我的问题没有像过去那样明确.我想问题是双重的:
for(;;){}循环的行为是否严格地是C通常评估表达式的方式的结果,还是这种行为特定于C计算for语句的方式?
为什么这个行为选择了for缺少条件表达式的循环?
Lig*_*ica 19
C和C++都保证了这种行为.
[C99: 6.8.5.3/1]:既子句-1和表达-3可以省略.省略的表达式-2由非零常量替换.
[C++14: 6.5.3/1]:该for声明Run Code Online (Sandbox Code Playgroud)for ( for-init-statement conditionopt; expressionopt) statement相当于
Run Code Online (Sandbox Code Playgroud){ for-init-statement while ( condition ) { statement expression ; } }[..]
[C++14: 6.5.3/2]:可以省略条件和表达式中的任何一个或两者.缺失条件使隐含while条款等效于while(true).
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |