gpt4 book ai didi

c - 为什么 for(;;) 循环表现得像无限循环?

转载 作者:太空狗 更新时间:2023-10-29 17:15:32 25 4
gpt4 key购买 nike

最近关于 for(;;){} 循环 (What does a for (;;) loop do) 的问题的答案似乎没有为我解答什么,所以我想我会尝试完善这个问题一点点。特别是,除了知道没有条件的 for 循环是无限循环之外,我还想知道为什么它们是无限循环。

在语句 for (;_;){} 中,_ 是一个条件表达式。我的第一个猜测是空表达式的计算结果可能为 0NULL。但是如果你测试:

for (;;){}

正如大家指出的那样,是一个无限循环。

for (;1;){}

是一个无限循环。

但是这些循环体都没有执行:

for (;0;){}
for (;NULL;){}

因此,空条件表达式的计算结果似乎既不是 0 也不是 NULL

所以,我的问题是:for (;;){} 循环的行为是 C 计算表达式的方式的产物,还是它只是一个特殊的实现定义的情况,因为一个从不执行的循环体不是很有用吗?

更新:阅读评论和答案后,我意识到我的问题并没有像它应该的那样清楚地表达出来。我想这个问题有两个方面:

  1. for(;;){} 循环的行为严格来说是 C 计算表达式的一般方式的结果,还是这种行为特定于 C 计算 for 语句?

  2. 为什么为缺少条件表达式的 for 循环选择这种行为?

最佳答案

C 和 C++ 都保证了这种行为。


[C99: 6.8.5.3/1]: Both clause-1 and expression-3 can be omitted. An omitted expression-2 is replaced by a nonzero constant.


[C++14: 6.5.3/1]: The for statement

for ( for-init-statement conditionopt; expressionopt) statement

is equivalent to

{
for-init-statement
while ( condition ) {
statement
expression ;
}
}

[..]

[C++14: 6.5.3/2]: Either or both of the condition and the expression can be omitted. A missing condition makes the implied while clause equivalent to while(true).

关于c - 为什么 for(;;) 循环表现得像无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39809327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com