如果Else声明缩进重要或不重要? (C ++)

时间:2018-05-24 18:11:44

标签: c++ if-statement

if else语句中的缩进是否与代码的执行有关,还是只是为了清洁代码?

Andrew Koening所着的Accelerated C ++一书中的例子:

while(c != cols){
    if(r == pad + 1 && c == pad + 1){
      cout << greet;
      c+=greet.size();
    } else {

      if(r == 0 || r == rows - 1 || c == 0 || c == cols - 1)
        cout << "*";

      else
        cout << " ";
        ++c;


    }

  }

无论是否r = 0,都会执行c的前缀增量,但我不明白为什么。

如果if语句变为true,则打印星号。如果没有打印空格并且c递增。 这就是我如何阅读它,但无论r或c的值是什么,c都会增加。

这就是书中的内容,但我找不到任何解释:

  

注意不同的缩进   ++℃;    提请注意这样一个事实,无论我们是否在   边界。

4 个答案:

答案 0 :(得分:15)

空格不会影响C ++运行时行为。 (与某些其他语言不同,如Python)。

我应该提一下,在else块中,你不使用大括号。因此,只有第一个语句(cout << " ";)将成为else子句的一部分。无论++c;r的值如何,后续的c都会执行。

请注意,最后一点是主观的,所以请加上一粒盐...正如您所看到的,当if ... else ...块中省略括号时,可能会产生混淆。有些人认为它会导致更简洁的代码,但许多人(包括我自己)会争辩说你应该总是使用大括号。当您在大型团队中工作时,这一点尤其重要,因为代码会随着时间的推移而增长。我在生产代码中看到很多案例,其中if语句缺少大括号,有人在if子句中添加了第二行,而没有记住添加大括号。这没有按预期工作,导致浪费的时间调试失败,只是因为省略了括号。

答案 1 :(得分:2)

C和C ++在解释代码时不受空格的影响。这并不意味着程序员不应该关心它的误用。

说明上述代码实际表示的最佳方法是明确定义所有推断的大括号,如下所示。请注意,没有大括号的if语句只有一行代码受到&#39; if then&#39;或者&#39;否则&#39;条款。

这是人们试图坚持的原因之一 &#39;良好的编码实践&#39;确保其他人能够清楚 解释程序员的流程和意图。

while(c != cols){
    if(r == pad + 1 && c == pad + 1){
        cout << greet;
        c+=greet.size();
    } else {
        if(r == 0 || r == rows - 1 || c == 0 || c == cols - 1){
            cout << "*";
        } else {
            cout << " ";
        }    
        ++c;
    }
}

答案 2 :(得分:0)

与python不同,C ++不关心缩进。 但是你的其他只适用于第一行,要应用于一个块,它应该在{}

之内
else
{
   cout << " ";
   ++c;
}

缩进不是你的问题。

答案 3 :(得分:0)

在C ++中,缩进的长度不会影响语句的解释。有时需要空格来分隔字符int a。其他时候不需要a=b+c;

if语句定义为条件if(condition)只能是1个语句。

如果我们想要更多的陈述,我们必须用大括号{...}

对它们进行分组