函數本身默認外部(全局),不可嵌套定義。
默認情況下,同名外部變量/函數在所有編譯單元中指向**同一實體**(外部鏈接)。這為模塊間共享數據提供機制,但也帶來命名衝突風險。
| 操作 | 關鍵字 | 含義 | 內存分配 |
|---|---|---|---|
| 定義 | 無 / 初始化 | 創建實體 | 是 |
| 聲明 | extern | 引用外部實體 | 否 |
規則:全程序僅能定義一次,可聲明多次(通常在 .h 中聲明,.c 中定義)。
// common.h
extern int sharedVar; // 聲明
extern void sharedFunc(); // 聲明
// module1.c
#include "common.h"
int sharedVar = 42; // 定義(分配內存)
void sharedFunc() { ... }
// module2.c
#include "common.h" // 直接使用 sharedVar/sharedFunc
void useIt() { sharedVar++; sharedFunc(); }
static 修飾外部變量/函數 → **內部鏈接**,僅在當前編譯單元可見,實現模塊私有封裝。
const,編譯器可優化並防範誤改