一文讀懂C 中變數宣告和定義的關係

2021-10-18 16:06:20 字數 985 閱讀 6419

(本內容摘錄自《c++ primer 第五版》p41)

宣告(declaration):使得名字為程式所知,乙個檔案如果想使用別處定義的名字則必須包含對那個名字的宣告。

定義(definition):負責建立與名字關聯的實體。

變數宣告規定了變數的型別和名字,在這一點上定義與之相同。但是除此之外,定義還申請儲存空間,也可能會為變數賦乙個初值。

如果想宣告乙個變數而非定義它,就在變數名前新增關鍵字extern,而且不要顯式地初始化變數:

extern

int i;

//宣告i而非定義i

int j;

//宣告並定義i

任何包含了顯式初始化的宣告即成為定義。我們能給由extern關鍵字標記的變數賦乙個初始值,但是這麼做也就抵消了extern的作用。extern語句如果包含初始值就不再是宣告,而變成定義了:

extern

double pi=

3.1416

;//定義

在函式體內部,如果試圖初始化乙個由extern關鍵字標記的變數,將引發錯誤。

note:變數能且只能被定義一次,但是可以被多次宣告。

宣告和定義的區別看起來微不足道,但實際上非常重要。如果要在多個檔案中使用同乙個變數,就必須將宣告和定義分離。此時,變數的定義必須出現在乙個檔案中,而其他用到該變數的檔案必須對其進行宣告,卻絕對不能重複定義。

總結

int i;

//宣告並定義i

int i=0;

//定義i,非宣告

extern

int i;

//宣告i,非定義

extern

int i=0;

//定義i,非宣告,extern的作用被抵消

一文讀懂BERT中的WordPiece

2018年最火的 要屬google的bert,不過今天我們不介紹bert的模型,而是要介紹bert中的乙個小模組wordpiece。現在基本效能好一些的nlp模型,例如openai gpt,google的bert,在資料預處理的時候都會有wordpiece的過程。wordpiece字面理解是把wor...

C中變數的宣告和定義

變數定義就是告訴編譯器在何處建立變數的儲存,以及如何建立變數的儲存。變數定義指定乙個資料型別,幷包含了該型別的乙個或多個變數的列表。變數宣告向編譯器保證變數以指定的型別和名稱存在,這樣編譯器在不需要知道變數完整細節的情況下也能繼續進一步的編譯。變數宣告只在編譯時有它的意義,在程式連線時編譯器需要實際...

python中的對映 一文讀懂Python中的對映

python中的反射功能是由以下四個內建函式提供 hasattr getattr setattr delattr,改四個函式分別用於對物件內部執行 檢查是否含有某成員 獲取成員 設定成員 刪除成員。獲取成員 getattrclass foo def init self,name,age self.n...