7-1 复合语句(代码块)

复合语句compound statement(也称为代码块block块语句block statement)是由零个或多个语句组成的集合,编译器将其视为单个语句处理。

代码块以{符号开头,以}符号结束,需执行的语句置于其间。代码块可在允许单条语句的任何位置使用,且块末无需分号。

在编写函数时你已见过代码块的实例——函数主体即为代码块:

int add(int x, int y)
{ // start block
    return x + y;
} // end block (no semicolon)

int main()
{ // start block

    // multiple statements
    int value {}; // this is initialization, not a block
    add(3, 4);

    return 0;

} // end block (no semicolon)

块嵌套在其他块中

虽然函数不能嵌套在其他函数中,但块可以嵌套在其他块中:

int add(int x, int y)
{ // block
    return x + y;
} // end block

int main()
{ // outer block

    // multiple statements
    int value {};

    { // inner/nested block
        add(3, 4);
    } // end inner/nested block

    return 0;

} // end outer block

当代码块嵌套时,外层包裹的代码块通常称为外部代码块outer block,被包裹的内部代码块则称为内部代码块inner block嵌套代码块nested block


使用代码块实现条件执行多条语句

代码块最常见的应用场景之一是与if语句配合使用。默认情况下,当条件为真时,if语句仅执行单条语句。但若需在条件为真时执行多条语句,我们可以将单条语句替换为代码块。

例如:

#include <iostream>

int main()
{ // start of outer block
    std::cout << "Enter an integer: ";
    int value {};
    std::cin >> value;

    if (value >= 0)
    { // start of nested block
        std::cout << value << " is a positive integer (or zero)\n";
        std::cout << "Double this number is " << value * 2 << '\n';
    } // end of nested block
    else
    { // start of another nested block
        std::cout << value << " is a negative integer\n";
        std::cout << "The positive of this number is " << -value << '\n';
    } // end of another nested block

    return 0;
} // end of outer block

如果用户输入数字3,该程序将输出:

image

如果用户输入数字 -4,该程序将输出:

image


块嵌套层级

甚至可以将块嵌套在块中,再嵌套在块中:

#include <iostream>

int main()
{ // block 1, nesting level 1
    std::cout << "Enter an integer: ";
    int value {};
    std::cin >> value;

    if (value >  0)
    { // block 2, nesting level 2
        if ((value % 2) == 0)
        { // block 3, nesting level 3
            std::cout << value << " is positive and even\n";
        }
        else
        { // block 4, also nesting level 3
            std::cout << value << " is positive and odd\n";
        }
    }

    return 0;
}

函数的嵌套层级nesting level(也称嵌套深度nesting depth)是指在函数任意位置(包括最外层代码块)所能达到的最大嵌套代码块数量。在上例函数中,虽然存在4个代码块,但嵌套层级为3,因为该程序中任意位置最多只能嵌套3个代码块。

C++标准规定编译器应支持256层嵌套——但并非所有编译器都实现(例如截至撰写本文时,Visual Studio的支持层数更少)。

建议将嵌套层级控制在3层以内。正如过长的函数应进行重构(拆分为更小的函数),过度嵌套的代码块同样难以阅读,也应进行重构(将最深层的嵌套块拆分为独立函数)。

最佳实践
将函数的嵌套层级控制在3层以内。若函数需要更深的嵌套层级,请考虑将该函数重构为子函数。

posted @ 2026-02-21 16:48  游翔  阅读(1)  评论(0)    收藏  举报