宣告和定義的區別

2021-08-10 19:35:06 字數 1050 閱讀 5194



宣告和定義的區別

從編譯原理上來說:宣告是僅僅只告訴編譯器有某個型別變數被使用,編譯器並不會為它分配任何記憶體。而定義就是為其分配了記憶體空間。(

宣告不一定是定義,定義一定是定義)

變數的定義:用於為變數分配儲存空間,也可為變數指定初始值,變數有且僅有乙個定義。

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

變數的宣告有兩種:1.要建立儲存空間的。如

int a;//

宣告時就建立了儲存空間。這種被稱為「定義性宣告」或「定義」。

2.不用建立儲存空間的。如

extern int a;//a

在其他檔案定義的。這種被稱為「引用性宣告」。

外部變數的定義

與外部變數的宣告

是不同的。外部變數只能定義一次(系統根據外部變數定義分配記憶體,而且外部變數的初始化只能在定義時),位置位於所有函式的外面;但同乙個檔案中的外部宣告可以多次,可以在函式內部宣告(

哪個函式要用就在哪個函式內宣告

),函式外也可以宣告(在外部變數定義前)宣告(此處宣告的作用:宣告這個變數是乙個已在後面定義過的外部變數,僅僅為了提前引用該變數做了宣告而已)。

宣告外部變數時,可略型別:extern int a;------>extern a;

static宣告變數的作用:1.區域性變數用static,說明為變數分配的空間在整個程式的執行期間都始終存在。2.外部變數,只限於本檔案。

宣告和定義同時存在的情況:int a;

extern int a=1;(

只有當extern不存在初始化時才是宣告,其他形式均即是宣告又是定義

)。宣告僅是宣告的情況:void fun(int,int);(

僅提供了函式原型

)extern int a;

class a;

typename;

在類中定義的靜態資料成員的宣告。

定義僅是定義的情況:在類定義之外,定義並初始化乙個靜態資料成員;

在類外定義非內聯成員函式;

類中的成員函式和靜態資料成員;(

在類內的宣告不可以有多個)

宣告和定義的區別

c primer 3rd 5.2宣告語句講得不清不楚的,還是effective c 2nd講得清楚 所謂宣告 declaration 就是用來將乙個object function class 或tempate的型別名稱告訴編譯器 宣告式並不帶有細節資訊 對object而言,其定義式是編譯器為它配置記...

宣告和定義的區別

宣告和定義的區別 2012 03 22 14 34 標籤 declare define 分類 c language 變數定義 用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。變數宣告 用於向程式表明變數的型別和名字。定義也是宣告 當定義變數時我們宣告了它的型別和名字。ex...

宣告和定義的區別

一 宣告 指定了乙個變數的識別符號,用來描述變數的型別,是型別還是物件,或者函式等等,用於編譯器識別變數名所引用的實體。定義 是對宣告的實現或者例項化 例 int a 屬於宣告,並沒有給a 定義它的值 int a 3 宣告變數a為int型別,並定義為3.定義在前,宣告在後。二 宣告與定義的區別 定義...