##### 作用域
- 作用域
- **作用域**定义了[[C.标识符|标识符]]在程序中的可见范围, C语言有几种不同的作用域, 它们决定了标识符可以在哪些地方被访问
- 语法
- `块作用域`
- 任何在[[C.复合语句|复合语句]] `{}` 中定义的标识符, 只在该代码块内部可见
- `文件作用域`
- 在文件顶部定义的标识符, 在声明点开始, 翻译单元尾结束, 在整个文件内可见, 可以被该文件中的所有函数访问
- `函数作用域`
- 仅适用于标签, 如[[C.goto 和标记语句|goto 和标记语句]]使用的标签, 在函数内的任何位置都可见
- `函数原型作用域`
- [[C.函数|函数]]参数在函数原型 (函数声明) 的参数列表中仅在声明时可见, 之后无法在函数体外访问
- 示例
```c
// 块作用域
void func() {
int a = 10; // a 的作用域仅限于 func 函数内部
if (a > 5) {
int b = 20; // b 的作用域仅限于 if 语句块内部
}
// printf("%d", b); // 错误,b 在此不可见
}
// 文件作用域
int globalVar = 100; // 文件作用域的全局变量
static int fileGlobal = 50; // 文件作用域且仅限于当前文件
// 函数作用域
void func() {
goto label; // 跳转到 label
label:
printf("This is a label\n");
}
// 函数原型作用域
void func(int x, int y); // x 和 y 只能在函数原型中使用
```