for 没有增量 vs while

Tha*_*mer 5 c styles loops

我目前正在德国学习计算机科学,但之前曾参与过几个 C/C++ 开源项目。今天我们在学校开始学习 C,我的老师说在循环内修改 for 循环变量是不行的,我绝对同意。然而,我经常使用一个for循环,没有最后一个递增部分,然后在循环内部修改它,他也不喜欢这一点。

所以基本上可以归结为

for(int i=0; i<100;) {
    [conditionally modify i]
}
Run Code Online (Sandbox Code Playgroud)

int i=0;
while(i<100) {
    [conditionally modify i]
}
Run Code Online (Sandbox Code Playgroud)

我知道它们在编译后本质上是相同的,但我不喜欢使用 while 循环,因为:

  1. 将变量限制在尽可能小的范围内是常见的做法
  2. 如果您重用 i (由于范围较大,您必须这样做),它可能会引入错误
  3. 如果不使用不同的名称,则不能在稍后的循环中为 i 使用不同的类型

是否有任何风格指南/常见做法可供选择?

如果您回答“我喜欢同时/更多”,至少请提供一个这样做的理由。

我确实已经搜索过类似的问题,但是,我找不到此案例的任何真正答案。

小智 3

不同的人/团队之间的风格指南有所不同。

forC 标准描述了这样的语法:

for ( 子句 1 ; 表达式 2 ; 表达式 3 ) 语句

for 一旦你有效地使用了“ clause-1 ”,就立即使用是常见的做法,这样做的原因确实是因为范围有限:

[...] 如果子句 1是声明,则它声明的任何标识符的范围是声明的其余部分和整个循环,包括其他两个表达式;[...]

所以,你的论证没问题,你可以试着说服你的老师。但不要太努力。毕竟,风格问题很少有一个明确的答案,如果你的老师坚持他的规则,那么在为该课程编码时就遵循它们即可。