1. int i; // 聲明/定義視編譯器而定
2. int i = 0; // 定義:分配內存並初始化
3. extern int i; // 純聲明:不分配內存
int i; 的雙重性i,禁止重複聲明i = 1; 會觸發實際定義(分配內存)int i = 0; 強制定義redefinition of 'i'extern int i; 純聲明i 在別處定義,鏈接時解析undefined reference| 分配內存 | 可重複出現 | 初始化 | |
|---|---|---|---|
| 定義 | 是 | 否(同一作用域) | 可選 |
| 聲明 | 否 | 是(多文件 extern) | 不可初始化 |
一句话:定義創建實體並佔用內存;聲明僅引入符號供編譯器檢查類型與作用域。
摘自 Crazybaby's blog