如果我的理解是正确的,它们做的事情完全相同。为什么有人要使用“for”变体?只是个人喜好吗?
编辑:我想我也考虑到了“for (;;)”。
for (;;)
常用于避免编译器警告:
while(1)
或者while(true)
通常在最高警告级别下,会对条件表达式为常量进行编译器警告。
我从未见过for (;true;)
。我见过for (;;)
,唯一的区别似乎只是口味不同。我发现C程序员略微偏爱for (;;)
而不是while (1)
,但这仅仅是个人偏好。
这不是一个答案,而是一条注释:有时候记住for(;x;)和while(x)等价(换句话说,当我检查if条件语句的中心表达式时只说“while”),可以帮助我分析棘手的for语句…
例如,它使得明显的是,在循环的第一轮中心表达式总是在开头被计算,有些情况下我们可能会忘记这点,但是当你用while()格式查看时就完全没有歧义了。
有时候记住这一点也是很方便的。
a;
while(b) {
...
c;
}
几乎(见评论)与
相同for(a;b;c) {
...
}
我知道这很显而易见,但积极意识到这种关系确实有助于您快速在两种形式之间转换,以澄清令人困惑的代码。
while(true)
是一个永远不会失败的条件语句,而它们对for (;;)
则感到满意。因此,我更喜欢使用for (;;)
作为无限循环的习惯用法,但我认为这并不是个大问题。这是为了以后可能会使用真正的for()循环而做的准备。如果你看到for(;true;),那么它很可能是用于调试的代码。