C语言:程序块结构(学习《C程序设计语言》记录)

C语言不容许在在函数中定义函数。
可是,在函数中能够以程序块结构的形式定义变量。变量的声明(包括初始化)除了能够紧跟在函数开始的花括号以后,还能够紧跟在任何其余标识复合语句开始的左花括号以后。
以这种方式声明的变量能够隐藏程序块外与之同名的变量。它们之间没有任何关系,并在与左花括号匹配的右花括号出现以前一直存在。
举个例子。web

include <stdio.h>

int main()
{
        int i=222;
        if(1) 
        {
                int i=5;   
                printf("i = %d \n", i);
        }
        printf("i = %d \n", i);
        return 0;
}

编译运行:ubuntu

root@ubuntu:/adams/c/1_test# gcc -o test test.c 
root@ubuntu:/adams/c/1_test# ./test 
i = 5 
i = 222 
root@ubuntu:/adams/c/1_test#

if语句中的变量 i 的做用域是if语句的“真”分支,与程序块外声明的 i 无关。
每次进入程序块时,在程序块内声明以及初始化的自动变量都将被初始化。
静态变量只在第一次进入程序块是初始化一次。svg

须要注意的是:
在一个好的程序设计风格中,应该避免出现变量名隐藏外部做用域中相同名字的状况,不然,极可能引发混乱和错误。函数