c語言中巨集定義的define和typedef的區別是什麼

時間 2021-08-30 10:26:39

1樓:

1) #define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被的源程式時才會發現可能的錯誤並報錯。例如:

#define pi 3.1415926

程式中的:area=pi*r*r 會替換為3.1415926*r*r

如果你把#define語句中的數字9 寫成字母g 預處理也照樣帶入。

2)typedef是在編譯時處理的。它在自己的作用域內給一個已經存在的型別一個別名,但是you cannot use the typedef specifier inside a function definition。

3)typedef int * int_ptr;

與#define int_ptr int *

作用都是用int_ptr代表 int * ,但是二者不同,正如前面所說 ,#define在預處理 時進行簡單的替換,而typedef不是簡單替換 ,而是採用如同定義變數的方法那樣來宣告一種型別。也就是說;

//refer to (xzgyb(老達摩))

#define int_ptr int *

int_ptr a, b; //相當於int * a, b; 只是簡單的巨集替換

typedef int* int_ptr;

int_ptr a, b; //a, b 都為指向int的指標,typedef為int* 引入了一個新的助記符

這也說明了為什麼下面觀點成立

//qunkangli(維護成本與程式設計師的創造力的平方成正比)

typedef int * pint ;

#define pint int *

那麼:const pint p ;//p不可更改,但p指向的內容可更改

const pint p ;//p可更改,但是p指向的內容不可更改。

pint是一種指標型別 const pint p 就是把指標給鎖住了 p不可更改

而const pint p 是const int * p 鎖的是指標p所指的物件。

3)也許您已經注意到#define 不是語句 不要在行末加分號,否則 會連分號一塊置換。

2樓:影軒老豆

語法就不說了,#define是在預編譯的時候處理的,只能做簡單的字元的替換,為了方便記憶使用。而typedef是在編譯的時候處理的,事實上他並不是記得簡單的替代。

3樓:田真久

define是 預處理指令,所有的預處理指令都要以#開頭。這些指令在編譯之前使用的,當編譯的時候就不存在了。

typedef 是一個保留字,編譯的時候告訴編譯器 後面的兩個 是同義詞

c語言中怎樣修改巨集定義呢,C語言中怎樣修改巨集定義呢

青山鬱 什麼意思?是在定義巨集後的程式 中改,還是在編輯巨集定義的時候該?如果是前者,巨集定義是在預編譯時是就決定的,在程式執行時是不能改的 如果是後者,直接改就行了。 八條 比如你想定義n 5,就這樣 define n 5 如果你想修改巨集為x 3.2,則為 define x 3.2 看懂了嗎,希...

C 中如何定義全域性的巨集 define)

巨集定義這個東西,主要還是取決你你要怎麼使用。c 當中,如果你希望定義一個全域性變數或者說全域性常量的話,那麼建議使用。public static constint max length 但是如果你是定義編譯選項的話,其實是可以使用 define的,比如可以定義。define debug實現巨集編譯。c 把...

C中如何定義全域性的巨集變數 define)

c 是純粹的面嚮物件語言.和c 與c完全不同.所以不要認為他們是相似的.如果要實現c 的全域性巨集定義可以建立一個類做為專門的設定類.在其它類中using這個類或者用同一個namespace 或者使用配置檔案configurationmanager來定義全域性變數.使用xml也行 如果是debug,...