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