for(; true;)与while(true)不同?

时间:2009-01-13 20:39:14

标签: c++ c

如果我的理解是正确的,他们会做同样的事情。为什么有人会使用“for”变体?这只是味道吗?

编辑:我想我也在考虑(;;)。

8 个答案:

答案 0 :(得分:40)

for (;;)

通常用于防止编译器警告:

while(1)

while(true)

通常会抛出一个关于条件表达式为常量的编译器警告(至少在最高警告级别)。

答案 1 :(得分:8)

是的,这只是味道。

答案 2 :(得分:6)

我从未见过for (;true;)。我已经看到for (;;),唯一的区别似乎是品味。我发现C程序员稍微偏好for (;;)而不是while (1),但它仍然只是偏好。

答案 3 :(得分:4)

不是答案,而是一个注释:有时记得(; x;)与while(x)相同(换句话说,当我检查if条件的中心表达时,只说“while”)帮助我分析讨厌的陈述...
例如,很明显,中心表达式总是在循环的第一遍开始时进行计算,这可能会让你忘记,但是当你以while()格式查看时,它是完全明确的。

有时记住这个也很方便

a;
while(b) {
   ...
   c;
}

几乎(见评论)与

相同
for(a;b;c) {
    ...
}

我知道这很明显,但积极地了解这种关系确实可以帮助您快速转换一种形式,另一种形式来澄清令人困惑的代码。

答案 4 :(得分:3)

一些编译器(警告一直向上)会抱怨while(true)是一个永远不会失败的条件语句,而他们对for (;;)感到满意。

出于这个原因,我更喜欢使用for (;;)作为无限循环习语,但不要认为这是一个大问题。

答案 5 :(得分:1)

以防他们计划稍后使用真正的for()循环。如果你看到(; true;),它可能是要调试的代码。

答案 6 :(得分:0)

优化编译器应为它们生成相同的程序集 - 无限循环。

答案 7 :(得分:0)

编译器警告已经讨论过,所以我将从语义角度来看待它。我使用while(TRUE)而不是(;;),因为在我看来,(TRUE)听起来比(;;)更有意义。我读取(TRUE)为“TRUE始终为TRUE”。就个人而言,这是对代码可读性的改进。

所以,Zeus禁止我不记录我的代码(当然,这也就是发生)它只比替代方案更具可读性。

但是,总的来说,这是一个非常挑剔的事情,99%的时间都归结为个人偏好。