C 定義與宣告 區別

2021-07-29 08:07:33 字數 1712 閱讀 6160

《c++primer》第四版2.3.5節中這麼說到:

①變數定義:用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。

②變數宣告:用於向程式表明變數的型別和名字。

③定義也是宣告:當定義變數時我們宣告了它的型別和名字。

④extern關鍵字:通過使用extern關鍵字宣告變數名而不定義它。

1.定義也是宣告,extern宣告不是定義,即不分配儲存空間。extern告訴編譯器變數在其他地方定義了。

例如:extern int i; //宣告,不是定義

int i; //宣告,也是定義

2.如果宣告有初始化式,就被當作定義,即使前面加了extern。只有當extern宣告位於函式外部時,才可以被初始化。

例如:extern double pi=3.1416;  //定義

3.函式的宣告和定義區別比較簡單,帶有的就是定義,否則就是宣告。

例如:extern double max(double d1,double d2);  //宣告

4.除非有extern關鍵字,否則都是變數的定義。

例如:extern int i; //宣告

int i; //定義

程式設計風格:

1. 不要把變數定義放入.h檔案,這樣容易導致重複定義錯誤。

2. 盡量使用static關鍵字把變數定義限制於該原始檔作用域,除非變數被設計成全域性的。

3. 可以在標頭檔案中宣告乙個變數,在用的時候包含這個標頭檔案就宣告了這個變數。

總結:變數在使用前就要被定義或者宣告。

在乙個程式中,變數只能定義一次,卻可以宣告多次。

定義分配儲存空間,而宣告不會。

c++程式通常由許多檔案組成,為了讓多個檔案訪問相同的變數,c++區分了宣告和定義。

變數的定義(definition)用於為變數分配儲存空間,還可以為變數指定初始值。在程式中,變數有且僅有乙個定義。

宣告(declaration)用於向程式表明變數的型別和名字。定義也是宣告:當定義變數的時候我們宣告了它的型別和名字。可以通過使用extern宣告變數名而不定義它。不定義變數的宣告包括物件名、物件型別和物件型別前的關鍵字extern。

extern宣告不是定義,也不分配儲存空間。事實上它只是說明變數定義在程式的其他地方。程式中變數可以宣告多次,但只能定義一次。

只有當宣告也是定義時,宣告才可以有初始化式,因為只有定義才分配儲存空間。初始化式必須要有儲存空間來進行初始化。如果宣告有初始化式,那麼它可被當作是定義,即使宣告標記為extern。

任何在多檔案中使用的變數都需要有與定義分離的宣告。在這種情況下,乙個檔案含有變數的定義,使用該變數的其他檔案則包含該變數的宣告(而不是定義)。

——————————————————————–標頭檔案中定義與宣告

注意標頭檔案中不可以放變數的定義!!!一般情況下標頭檔案中只放變數的宣告,因為標頭檔案要被其他檔案包含(即#include),如果把定義放到標頭檔案的話,就不能避免多次定義變數,c++不允許多次定義變數,乙個程式中對指定變數的定義只有一次,宣告可以無數次。

不過有三個例外,一下三中實體的定義也可放到標頭檔案中。

1.值在編譯時就已知的const 變數的定義可以放到標頭檔案中

如:const int num(10);

2.類的定義可以放到標頭檔案中

3.inline 函式

這三個實體可以定義在多個原始檔中,只要在每個原始檔中的定義相同。

/——————————————————————–標頭檔案中定義與宣告

C 宣告與定義的區別

一,宣告與定義的區別 宣告是將乙個名稱引入程式。定義提供了乙個實體在程式中的唯一描述,涉及到記憶體空間的分配以及初始值的設定。宣告和定義有時是同時存在的。1,定義也是宣告,extern宣告不是定義,即不分配儲存空間。int a 10 定義就是宣告 extern int b 宣告,不是定義 注意 如果...

C 中宣告與定義的區別

宣告 一種把乙個名稱引入或者重新引入到某個c 作用域的構造。定義 它也是一種宣告,但該宣告必須給出被宣告實體的細節。對於變數而言,這裡的細節是指 為被宣告實體保留儲存空間。對於class型別和函式定義而言,指的是包含有一隊花括號內容的宣告。對於外部變數而言,指的是前面沒有關鍵字extern或者在宣告...

C 中定義與宣告的區別

c 中的定義與宣告是兩個很容易混淆的概念,而且對於初學者來說,必須要區分兩個概念的不同。乙個變數的定義是用於為變數分配儲存空間。也可以為變數指定初始值。也就是說,定義不一定要有初始值,但是一定要分配儲存空間。而乙個變數的宣告則是說明乙個變數的型別以及名字。定義也是宣告,讀者可以這樣想,如果乙個變數要...