从头学C(39)程序块结构

0

虽然C语言不允许在函数内部定义新的函数,但可以允许在函数内部以程序块结构的形式定义变量。

第四章 函数与程序结构 >> 4.8 程序块结构

变量的声明、定义除了可以紧跟在函数开始的花括号之后,也可以紧跟在任何其他标识的复合语句开始的花括号之后。

以这种方式声明的变量其作用域就是对应的花括号的范围之内,因此可以隐藏程序块之外的与之同名的变量。

在下面这个程序中,

if (n > 0) {
        int i;    /* declare a new i */

        for (i = 0; i < n; i++)
                ... ...
}

变量 i 的作用域是 if 语句的“真”分支,这个 i 与程序块外声明的 i 无关。每次进入程序块时,在程序内声明及初始化的局部变量都将被初始化(静态变量只在第一次进入程序块时被初始化一次)。

自动变量(包括形式参数)也可以隐藏与之同名的外部变量与函数。比如:

int x;
int y;

f(double x)
{
        double y;
}

两个同名变量 x 之间没有任何关系,两个 y 也是如此。

不过,最后还要强调一句的是,我们应该尽量避免出现变量名隐藏外部作用域中同名变量的情况,因为这个很容易引起混淆和错误。

Leave A Reply