C ++如果跟着一个for循环块

时间:2013-09-11 17:22:53

标签: c++ if-statement

我记得有一次我看到有人写这样的C ++代码:

if (something is true)
    for (int i = 0; i < max; i++) {
        //do something
        line 1;
        line 2;
        line 3;
        ....
        ....
    }
else
    ....

它的工作原理与以下代码相同:

if (something is true) {  //note the bracket here
    for (int i = 0; i < max; i++) {
        //do something
        line 1;
        line 2;
        line 3;
        ....
        ....
    }
}
else
    ....

我想知道编译器是否将for循环块视为嵌套在if子句中的一行?括号内的多行代码是否总是被视为一行?我不太明白编译器如何解析和分析它。

5 个答案:

答案 0 :(得分:5)

这确实是正确的代码,虽然它可能很容易混淆读者。 if - 语句将第一个以下语句视为then语句。 {}之间的代码通常被视为块或复合语句,包含其中的语句。类似地,for语句被认为是一个语句,包括循环体,它是跟随它的第一个语句(并且可以再次是一个块)。

答案 1 :(得分:2)

你的第一个案例运行正常,因为没有括号的if语句将下一个语句(for循环)视为要执行的主体的一部分。 for循环的主体是循环本身的一部分。

如果循环本身没有括号,那么只会执行循环的第一个语句。

答案 2 :(得分:2)

它们不是真正的“线条”,而是陈述。比如你的

line 1;
line 2;
line 3;

可以改写为和以下一样有效:

line 1; line 2; line 3;

因此,编译器并不是真正关注行而是查看语句。

语法定义的单个语句被认为(稍微简化):

1)一个简单的语句以分号结尾(如上所述)

OR

2)作为一个语句块,它是括号{}中的一个或多个简单语句。

答案 3 :(得分:2)

{}定义了compound statement或阻止。

  

随着控制结构的引入,我们将不得不这样做   引入一个新概念:复合语句或块。一个街区是一个   由所有C ++分隔的分号(;)分隔的语句组   语句,但在括在大括号中的块中组合在一起:{}:

     

来自cplusplus.com:Control Structures

if控制结构定义如下:

if (condition) statement

statement可以定义为单个指令/语句,或compound statement。无论哪种方式,它都是下一个要执行的陈述。

for (;;) statement是一种特殊类型的控制结构,称为迭代结构

因此,

//The control structure is going to apply to the next statement
if (condition)
    for (;;) //This for loop is the next statement. It applies to the next statement.
    {
        //The next statement is a compound statement.
    }

答案 4 :(得分:0)

如果if语句后面没有括号,如果条件为真,它将只处理下一行。由于下一行是for语句,因此将其视为一个命令。