如果标识符的相应声明出现在块内(具有函数定义中的参数声明),则标识符具有块作用域。范围结束于相应块的末尾。
具有相同标识符的不同实体不能具有相同的范围,但是范围可以重叠。在范围重叠的情况下,唯一可见的范围是在最内部范围中声明的范围。
#include <stdio.h> void test(int bar) // 条具有范围测试功能块 { int foo = 5; // foo具有范围测试功能块 { int bar = 10; // bar具有作用域内部块,与先前的test:bar声明重叠,并且隐藏了test:bar printf("%d %d\n", foo, bar); // 5 10 } // 内杆范围的末端 printf("%d %d\n", foo, bar); // 5 5,这里的bar是test:bar } // test:foo和test:bar范围的结尾 int main(void) { int foo = 3; // foo具有作用域主要功能块 printf("%d\n", foo); // 3 test(5); printf("%d\n", foo); // 3 return 0; } // main:foo范围的结尾