没有增量vs

时间:2017-10-17 09:57:18

标签: c loops styles

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

所以基本上归结为

for(int i=0; i<100;) {
    [conditionally modify i]
}

VS

int i=0;
while(i<100) {
    [conditionally modify i]
}

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

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

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

    如果你回答&#34;我喜欢/同时/更多&#34;至少说明你这样做的原因。

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

4 个答案:

答案 0 :(得分:2)

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

C标准描述了for的语法:

  

for ( clause-1 ; expression-2 ; expression-3 < / em> ) 声明

通常的做法是,只要 ,您就可以有效地使用&#34; 子句-1 &# 34;,并且这样做的原因是确实,因为范围有限:

  

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

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

答案 1 :(得分:0)

    for(int i=0; i<100;) {
[conditionally modify i]
}

因为这看起来很混乱,不是写入循环的标准方法。此外,有条件地修改我是危险的,你不想这样做。阅读代码的人会在理解你如何增加,为什么,何时......等方面遇到问题。您希望保持代码清晰易懂。

我个人永远不会通过有条件地修改迭代器来编写for循环。如果您需要它,您可以使用额外的计数器或类似的东西。但是你不应该用条件迭代器来控制流量,有些人甚至可以避免中断并继续。

答案 2 :(得分:0)

程序员在决定使用哪个循环时会遵循一些常见做法 - forwhile

当事先知道迭代次数时,for循环似乎最合适。例如 -

/*N - size of array*/
for (i = 0; i < N; i++) {
  ...
}

但是,可能存在许多复杂问题,其中迭代次数取决于某个条件并且无法事先预测,while循环在这些情况下更可取。 例如 -

while( fgets( buf, MAXBUF, stdin ) != NULL)

但是,forwhile循环都是入口控制循环,并且是可互换的。它完全取决于程序员决定使用哪一个。

答案 3 :(得分:0)

如果要修改体内循环计数器,我建议不要使用for循环,因为它比while循环更容易引起读者混淆。

您可以使用额外的块来解决范围限制的问题:

{
    int i = 0;
    while (i < 100) {
        [conditionally modify i]
    }
}