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都会增加。
这就是书中的内容,但我找不到任何解释:
注意不同的缩进 ++℃; 提请注意这样一个事实,无论我们是否在 边界。
答案 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个语句。
如果我们想要更多的陈述,我们必须用大括号{...}
对它们进行分组