块作用域:
int test(int n) // 函数参数 'n' 的作用域开始 { // 函数体开始 ++n; // 'n' 在作用域中并指代函数参数 // int n = 2; // 错误:不能在同一作用域重声明标识符 for(int n = 0; n<10; ++n) { // 循环局域的 'n' 的作用域开始 printf("%d\n", n); // 打印 0 1 2 3 4 5 6 7 8 9 } // 循环局域的 'n' 的作用域结束 // 函数参数 'n' 回到作用域 printf("%d\n", n); // 打印参数的值 } // 函数参数 'n' 的作用域结束 int t = n; // 错误:名称 'n' 不在作用域中
文件作用域
在任何块或参数列表外声明的任何标识符的作用域,在声明点开始,翻译单元尾结束。
int i; // i 的作用域开始 static int g(int a) { return a; } // g 的作用域开始(注意 "a" 拥有块作用域) int main(void) { i = g(2); // i 和 g 在作用域中 }