每个代码块都有自己的命名规则。外层代码块的名字总是有效的,除非内层的代码块对它进行了重新定义。如果内层代码块的名字进行了重新定义,那么在这个内层代码块中,外层代码块的名字被隐藏或屏蔽。代码块可以嵌套多层,其深度取决于系统限制。
#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