main() {
int i=2, j=3, k;
k = i + j; // k=5
{
int k = 8; // 新 k 遮蔽外層 k
if (i == 3) printf("%d\n", k); // 輸出 8
}
printf("%d\n%d\n", i, k); // 輸出 2, 5 (外層 k)
}
extern 聲明(定義在前可省略)
int a, b; // 全局
void f1() { ... } // 可直接用 a,b
float x, y; // 全局,但定義在 f1 後
int fz() { ... } // 需 extern x,y 才能用
main() { ... } // 可用 a,b,x,y
int s1, s2, s3; // 全局存面積
int vs(int a, int b, int c) {
int v = a*b*c;
s1 = a*b; s2 = b*c; s3 = a*c;
return v; // 返回體積
}
main() {
int v, l, w, h;
scanf("%d%d%d", &l, &w, &h);
v = vs(l, w, h);
printf("v=%d s1=%d s2=%d s3=%d\n", v, s1, s2, s3);
}
| 概念 | 位置 | 次數 | 可初始化 |
|---|---|---|---|
| 定義 | 所有函數外 | 一次 | 是 |
| 聲明 | 使用它的函數內 | 多次 | 否 |
int l=3, w=4, h=5; // 全局
int vs(int l, int w) { // 形參同名
extern int h;
return l*w*h; // 用形參 l,w + 全局 h
}
main() {
extern int w, h;
int l = 5; // 局部遮蔽全局 l
printf("%d", vs(l, w)); // 5*4*5=100
}
作用域(空間可見性)與生存期(時間存在性)是理解變量行為的兩個正交維度。