C C 中宣告與定義

2021-07-15 08:41:34 字數 1009 閱讀 1987

宣告不分配記憶體空間,宣告只是告訴編譯器存在乙個名字是xx的變數、函式、結構體等等。

宣告一般寫在標頭檔案中。

定義分配記憶體空間,宣告的變數、函式、結構體等就可以在程式中使用了。

宣告一般寫在原始檔中。

(3)變數

int a; //(1)

int b=1; //(2)

在c中,(1)沒有進行初始化,將其視為單純的宣告或者「臨時性定義」。(2)進行了初始化,實際分配了記憶體空間,將其視為定義。

在c++中,沒有「臨時性定義」的概念,上述兩種情況都視為定義。

因此,對於一般的區域性變數,區分宣告和定義並沒有實際性的意義。真正有意義的宣告是extern int a;等特殊變數的宣告。

對乙個變數的宣告可以出現多次,如外部變數,在每個用到該變數的檔案都應該進行宣告;對乙個變數的定義只能有一次。

一些測試:

全域性變數:自動賦初值0

區域性變數:

codeblocks:

c/c++(debug):列印該變數,出現隨機數,但不變。

c/c++(release):列印該變數,結果是0,初步判斷codeblocks自動賦值0.

dev-c++:

c/c++(debug/release):列印該變數,出現隨機數,但不變。

visual studio 2013:

c/c++(debug/release):報錯。

(4)vc的debug

vc的debug版會把未初始化的指標自動初始化為0xcccccccc,而不是就讓它隨機去,那是因為debug版的目的是為了方便我們除錯程式的,如果野指標的初值不確定,那麼每次除錯同乙個程式就可能出現不一樣的結果,比如這次程式崩掉,下次正常執行,再一次雖然沒崩掉,但結果不對……那顯然對我們debug是非常不利的。

二進位制0xcccccccc,十進位制-858993460,二進位制11001100 11001100 11001100 11001100,漢字 「燙」。

(5)結構體

宣告

C C 中宣告與定義

今天在寫程式的時候遇到這樣乙個問題 我的工程分為 main.cpp paint.cpp file.cpp struct.h 最初的想法是在標頭檔案中把結構體和所有的資料定義出來,如果哪個cpp檔案用到了這些東西,直接加入該標頭檔案就好了,結果報錯 經過查資料,發現將資料定義在標頭檔案中,如果多個cp...

C C 宣告與定義

變數的定義 definition 用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義 變數的宣告 declaration 用於向程式表明變數的型別和名字。定義也是宣告 當定義變數時我們宣告了它的型別和名字。可以通過使用extern關鍵字宣告變數名而不定義它。有分配空間...

C C 宣告與定義

declaration 宣告 指將乙個名稱引入當前編譯單元,或者重新宣告乙個前面已經宣告過的名稱,宣告指定了如何解釋乙個名稱和該名稱具有的屬性 例如 int main definition 定義 除了以下情況,宣告就是定義 a.宣告函式但不包括函式體 b.宣告包含extern鏈結限定符,例如 ext...