每个代码块都有自己的命名规则。外层代码块的名字总是有效的,除非内层的代码块对它进行了重新定义。如果内层代码块的名字进行了重新定义,那么在这个内层代码块中,外层代码块的名字被隐藏或屏蔽。代码块可以嵌套多层,其深度取决于系统限制。
#include <stdio.h> int main() { int a=1,b=2,c=3; printf("%3d%3d%3d\n",a,b,c); /* 1 2 3*/ { int b=4; float c=5.0; printf("%3d%3d%5.1f\n",a,b,c); /* 1 4 5.0 */ a=b; { int c; c=b; printf("%3d%3d%3d\n",a,b,c); /* 4 4 4 */ } printf("%3d%3d%5.1f\n",a,b,c); /* 4 4 5.0 */ } printf("%3d%3d%3d\n",a,b,c); /* 4 2 3*/ }
int 变量a是在外层代码块中声明的,并且再也没有被重新声明。因此,它在所有的嵌套代码块中都有效。变量b和c在第一内层代码块中进行了重新定义,因此隐藏了外层的同名变量。在离开这个代码块后,b和c再次表示外层代码块变量,并且它们的值仍然是外层代码块所初始化的值。最内层的代码块对c再次进行了重新定义,因此在这个代码块中,外层的c和次外层的c都被最内层的c所隐藏。
参考书目:A BOOK on C