如果我的理解是正确的,他们会做同样的事情。为什么有人会使用“for”变体?这只是味道吗?
编辑:我想我也在考虑(;;)。
答案 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%的时间都归结为个人偏好。