首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言聲明與定義的本質區別

     編輯:關於C

三種寫法的語義差異

1. int i;      // 聲明/定義視編譯器而定
2. int i = 0;  // 定義:分配內存並初始化
3. extern int i; // 純聲明:不分配內存

1. int i; 的雙重性

  • 大多數編譯器視為「暫定定義」:若後續無顯式初始化的定義,則在編譯單元結束時自動轉為定義並零初始化
  • 本質上向編譯器宣告:當前作用域預留符號 i,禁止重複聲明
  • 賦值操作 i = 1; 會觸發實際定義(分配內存)

2. int i = 0; 強制定義

  • 明確綁定內存地址,禁止同一作用域內再次定義
  • 重複定義直接報錯:redefinition of 'i'

3. extern int i; 純聲明

  • 所有編譯器一致視為聲明,不分配存儲
  • 告訴編譯器:符號 i 在別處定義,鏈接時解析
  • 若鏈接階段找不到定義,報 undefined reference

核心區別總結

分配內存可重複出現初始化
定義是否(同一作用域)可選
聲明否是(多文件 extern)不可初始化

一句话:定義創建實體並佔用內存;聲明僅引入符號供編譯器檢查類型與作用域。

摘自 Crazybaby's blog

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved