【发布时间】:2010-10-01 05:45:47
【问题描述】:
如果我的理解是正确的,他们会做同样的事情。为什么有人会使用“for”变体?只是味道吗?
编辑:我想我也在考虑 for (;;)。
【问题讨论】:
如果我的理解是正确的,他们会做同样的事情。为什么有人会使用“for”变体?只是味道吗?
编辑:我想我也在考虑 for (;;)。
【问题讨论】:
是的,只是味道。
【讨论】:
我从未见过for (;true;)。我已经见过for (;;),唯一的区别似乎是品味。我发现 C 程序员更喜欢 for (;;) 而不是 while (1),但这仍然只是偏好。
【讨论】:
以防他们计划稍后使用真正的 for() 循环。如果你看到 for(;true;),它可能是要调试的代码。
【讨论】:
一些编译器(警告一直向上)会抱怨while(true) 是一个永远不会失败的条件语句,而他们对for (;;) 很满意。
出于这个原因,我更喜欢使用for (;;) 作为无限循环习语,但不要认为这有什么大不了的。
【讨论】:
for (;;)
通常用于防止编译器警告:
while(1)
或
while(true)
通常会引发关于条件表达式为常量的编译器警告(至少在最高警告级别)。
【讨论】:
不是答案,而是注释:有时记住 for(;x;) 与 while(x) 相同(换句话说,当我检查 if 条件的中心表达式时只说“while”)有助于我分析讨厌的陈述...
例如,很明显,中心表达式总是在循环的第一遍开始时计算,您可能会忘记这一点,但是当您以 while() 格式查看它时,它是完全明确的。
有时记住这一点也很方便
a;
while(b) {
...
c;
}
几乎(见 cmets)和
一样for(a;b;c) {
...
}
我知道这很明显,但积极了解这种关系确实有助于您在一种形式和另一种形式之间快速转换,以澄清令人困惑的代码。
【讨论】:
优化编译器应该为它们生成相同的程序集——一个无限循环。
【讨论】:
编译器警告已经讨论过了,所以我将从语义的角度来处理它。我使用 while(TRUE) 而不是 for(;;),因为在我看来,while(TRUE) 听起来比 for(;;) 更有意义。我将 while(TRUE) 读为“而 TRUE 始终为 TRUE”。就个人而言,这是对代码可读性的改进。
因此,Zeus 禁止我不记录我的代码(当然,这种情况 - 永远不会发生)它比替代方案更具可读性。
但是,总的来说,这是一件非常挑剔的事情,以至于 99% 的时间都归结为个人喜好。
【讨论】: