1、先說「宣告」和「定義」的區別:(這裡的物件泛指函式、變數等)
「宣告」只是簡單地告訴編譯器在其他地方建立的物件的名字,允許你使用這個名字,並不分配記憶體空間,以extern關鍵字標識。
「定義」是一種特殊的宣告,它在宣告的同時告訴編譯器為物件分配記憶體空間。c語言的物件必須有且只有乙個定義,但可以有多個extern宣告。 定義
只能出現在乙個地方
確定物件的型別並分配記憶體,建立新的物件,如int a[10]; 宣告
可以多次出現
描述物件的型別,用於指代其他地方定義的物件,如extern int a;這裡由於不分配記憶體,所以不需要指定陣列長度。
2、再說typedef和#define的區別:
typedef:為資料型別建立別名,如: typedefint myint;
#define: 巨集定義,巨集文本替換,如: define n100
二者之間的關鍵區別在於編譯器把typedef定義的型別視為一種徹底的型別封裝,宣告之後不允許往裡面增加別的東西。從下面兩個例子可以看出二者的不同:
(1) #define myint int
unsigned myint i;//ok,no problem
typedef int myint;
unsigned myint i;//error,illegal
(2) #define int_ptr int*
int_ptr a,b;//擴充套件以後:int* a,b;(a,b為不同的型別)
typedef int_ptr int*;
int_ptr a,b;//a,b型別一致,都為int*
體會c語言之宣告
宣告在c 語言程式設計過程中起著核心的作用,通過宣告變數和函式,可以檢查程式潛在的錯誤以及把程式翻譯成目標 兩方面為編譯器提供至關重要的資訊。在宣告變數和函式上有許多共同點。此外宣告還為儲存期限,作用域,以及連線提供重要的堅實的基礎。宣告如何構成 說明符 乙個或多個宣告表示式 說明符 描述宣告變數和...
非原 c語言之宣告和定義的區別
什麼是定義?什麼是宣告?它們有何區別?舉個例子 12 a inti b externinti 關於extern,後面解釋 哪個是定義?哪個是宣告?或者都是定義或者都是宣告?我所教過的學生幾乎沒有一人能回答上這個問題。這個十分重要的概念在大學裡從來沒有被提起過!什麼是定義 所謂的定義就是 編譯器 建立...
c語言宣告和定義
宣告 普通的宣告,它所說明並非是自身,而是其他地方建立的物件 定義 他為物件分配了記憶體,讓這個物件實實在在的佔據了系統的一塊記憶體。理解c語言宣告的優先順序 a 宣告從它的名字開始讀取,然後按照優先順序順序依次讀取。b 優先順序從高到底依次是 b1 宣告中被括號括起來的那部分 b2 字尾操作符 括...