一、定義的概述
1. 變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。 (在乙個程式中,變數有且僅有乙個定義。)
2. 宣告用於向程式表明變數的型別和名字。(程式中變數可以宣告多次。)
3. 定義也是宣告 —— 當定義變數的同時,我們也就宣告了它的型別和名字。
二、extern關鍵字
1. extern 宣告變數而不定義它,也不分配儲存空間。(事實上,它只是說明變數定義在程式的其他地方。)
2. 不定義變數的宣告包括物件名、物件型別和物件型別前的關鍵字extern:
extern int i; // declares but does not define
iint i; // declares and defines
i3. 只有當宣告也是定義時,宣告才可以有初始化式,因為只有定義才分配儲存空間。
4. 如果宣告有初始化式,那麼即使宣告標記為 extern,它仍然被當作是定義:
extern double pi = 3.1416; // 雖然使用了 extern ,但是這條語句還是定義了 pi,分配並初始化了儲存空間。
(ps:只有當 extern 宣告位於函式外部時,才可以含有初始化式。)
因為已初始化的 extern 宣告被當作是定義,所以該變數任何隨後的定義都是錯誤的。
extern double pi = 3.1416; // definition
double pi; // error: redefinition of
pi同樣,隨後的含有初始化式的 extern 宣告也是錯誤的:
extern double pi = 3.1416; // definition
extern double pi; // ok: declaration not definition
extern double pi = 3.1416; // error: redefinition of
pi
定義和宣告的區別
之前學習c c 的時候,都沒去注意變數的定義和宣告的具體區別,也隨意將它們放在標頭檔案,今日看c primer,才發現原來變數的定義和宣告之間的區別竟然如此之大,而且區別它們兩個竟然如此重要。變數的定義用於為變數分配儲存空間,還可以為變數指定初始值。在乙個程式中,變數有且僅有乙個定義。宣告用於向程式...
定義和宣告的區別
2 變數定義和變數宣告的區別 3 物件定義和物件宣告的區別 關於宣告和定義有如下兩種特殊情況需要注意 1 宣告和定義如果變數型別不一致,將導致錯誤的解析。global.c float g f 10.0 main.c extern int g f intmain void 2 對於結構體型別如果只有宣...
變數定義和宣告的區別
所謂定義就是 編譯器 建立乙個物件,為這個物件分配一塊記憶體,並給它取上乙個名字,這個名字就是就是我們經常所說的變數名或物件名。宣告有兩重含義 1 告訴編譯器,這個名字已經匹配到一塊記憶體上,下面的 用到變數或者物件是在別的地方定義的。宣告可以出現多次。2 告訴編譯器,這個名字已經被預定了,別的地方...