int a = 10; (配置 4 bytes、初始化)int foo() { return 1; }extern int a; — 告知編譯器 a 在其他編譯單元定義void func(int, char); — 預留函式簽章,允許先呼叫後定義| 特性 | 定義 | 宣告 |
|---|---|---|
| 記憶體配置 | 是 | 否 |
| 同一作用域重複 | 禁止 | 允許 |
| 初始化 | 可初始化 | 不可初始化 (extern 除外) |
| 函式 | 提供本體 { ... } | 僅簽章 ; |
// file1.c
int global = 10; // 定義 (外部連結)
static int internal = 5; // 定義 (內部連結)
void func() { ... } // 定義
// file2.c
extern int global; // 宣告:引用 file1.c 的 global
// extern int internal; // 錯誤:internal 為內部連結,不可跨檔引用
void func(); // 宣告:前向宣告,允許在定義前呼叫
func(); // 呼叫
《C 語言深度解析》總結:定義建立實體、宣告建立關聯。掌握此區別是理解連結模型、避免重複定義錯誤、設計模組化程式的基石。