#define、const、typedef的區(qū)別

#define、const、typedef的區(qū)別

ID:8795475

大小:16.23 KB

頁數(shù):7頁

時間:2018-04-08

#define、const、typedef的區(qū)別_第1頁
#define、const、typedef的區(qū)別_第2頁
#define、const、typedef的區(qū)別_第3頁
#define、const、typedef的區(qū)別_第4頁
#define、const、typedef的區(qū)別_第5頁
資源描述:

《#define、const、typedef的區(qū)別》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、#define、const、typedef的區(qū)別文章分類:JavaEye#define并不是定義變量,只是用來做文本替換例如:#definePI3.1415926floatangel;angel=30*PI/180;那么,當(dāng)程序進行編譯的時候,編譯器會首先將“#definePI3.1415926”以后的,所有代碼中的“Pi”全部換成“3.1415926”然后再進行編譯。我查到一個講const與#define的差別的帖子,里面談到const與#define最大的差別在于:前者在堆棧分配了空間,而后者只是把具體數(shù)值直接傳遞到目標(biāo)變量罷了?;蛘哒f,c

2、onst的常量是一個Run-Time的概念,他在程序中確確實實的存在并可以被調(diào)用、傳遞。而#define常量則是一個Compile-Time概念,它的生命周期止于編譯期:在實際程序中他只是一個常數(shù)、一個命令中的參數(shù),沒有實際的存在。const常量存在于程序的數(shù)據(jù)段,#define常量存在于程序的代碼段。至于兩者的優(yōu)缺點,要看具體的情況了。一般的常數(shù)應(yīng)用,筆者個人認為#define是一個更好的選擇:i.從run-time的角度來看,他在空間上和時間上都有很好優(yōu)勢。ii.從compile-time的角度來看,類似m=t*10的代碼不會被編譯器優(yōu)化,

3、t*10的操作需要在run-time執(zhí)行。而#define的常量會被合并(在上例中T*10將被0x82取代)。但是:如果你需要粗魯?shù)男薷某?shù)的值,那就得使用const了,因為后者在程序中沒有實際的存在。(其實應(yīng)該說修改數(shù)據(jù)段比代碼段要簡單^_^)。有關(guān)#define的用法1.簡單的define定義#defineMAXTIME1000程序中遇到MAXTIME就會當(dāng)作1000來處理.一個簡單的MAXTIME就定義好了,它代表1000,如果在程序里面寫if(i

4、換為1000。這樣的定義看起來類似于普通的常量定義CONST,但也有著不同,因為define的定義更像是簡單的文本替換,而不是作為一個量來使用,這個問題在下面反映的尤為突出。2.define的“函數(shù)定義”define可以像函數(shù)那樣接受一些參數(shù),如下#definemax(x,y)(x)>(y)?(x):(y);這個定義就將返回兩個數(shù)中較大的那個,看到了嗎?因為這個“函數(shù)”沒有類型檢查,就好像一個函數(shù)模板似的,當(dāng)然,它絕對沒有模板那么安全就是了??梢宰鳛橐粋€簡單的模板來使用而已。但是這樣做的話存在隱患,例子如下:#defineAdd(a,b)a+b

5、;在一般使用的時候是沒有問題的,但是如果遇到如:c*Add(a,b)*d的時候就會出現(xiàn)問題,代數(shù)式的本意是a+b然后去和c,d相乘,但是因為使用了define(它只是一個簡單的替換),所以式子實際上變成了c*a+b*d另外舉一個例子:#definepin(int*);pina,b;本意是a和b都是int型指針,但是實際上變成int*a,b;a是int型指針,而b是int型變量。這時應(yīng)該使用typedef來代替define,這樣a和b就都是int型指針了。所以我們在定義的時候,養(yǎng)成一個良好的習(xí)慣,建議所有的層次都要加括號。3.宏的單行定義#def

6、ineA(x)T_##x#defineB(x)#@x#defineC(x)#x我們假設(shè):x=1,則有:A(1)------)T_1B(1)------)'1'C(1)------)"1"4.define的多行定義define可以替代多行的代碼,例如MFC中的宏定義(非常的經(jīng)典,雖然讓人看了惡心)#defineMACRO(arg1,arg2)do{/*declarations*/stmt1;stmt2;/*...*/}while(0)/*(notrailing;)*/關(guān)鍵是要在每一個換行的時候加上一個""5.在大規(guī)模的開發(fā)過程中,特別

7、是跨平臺和系統(tǒng)的軟件里,define最重要的功能是條件編譯就是:#ifdefWINDOWS............#endif#ifdefLINUX............#endif可以在編譯的時候通過#define設(shè)置編譯環(huán)境6.如何定義宏、取消宏//定義宏#define[MacroName][MacroValue]//取消宏#undef[MacroName]普通宏#definePI(3.1415926)帶參數(shù)的宏#definemax(a,b)((a)>(b)?(a),(b))關(guān)鍵是十分容易產(chǎn)生錯誤,包括機器和人理解上的差異等等。7.條件編

8、譯#ifdefXXX…(#else)…#endif例如#ifdefDV22_AUX_INPUT#defineAUX_MODE3#else#define

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。