(y)?(x):(y);因?yàn)檫@個(gè)“函數(shù)”沒有類型檢查,就好像一個(gè)函">
#define用法以及#define和typedef區(qū)別

#define用法以及#define和typedef區(qū)別

ID:9264125

大小:21.87 KB

頁(yè)數(shù):6頁(yè)

時(shí)間:2018-04-25

#define用法以及#define和typedef區(qū)別_第1頁(yè)
#define用法以及#define和typedef區(qū)別_第2頁(yè)
#define用法以及#define和typedef區(qū)別_第3頁(yè)
#define用法以及#define和typedef區(qū)別_第4頁(yè)
#define用法以及#define和typedef區(qū)別_第5頁(yè)
資源描述:

《#define用法以及#define和typedef區(qū)別》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)

1、1.簡(jiǎn)單的define定義#defineMAXTIME10002.define的“函數(shù)定義”define可以像函數(shù)那樣接受一些參數(shù),如下#definemax(x,y)(x)>(y)?(x):(y);因?yàn)檫@個(gè)“函數(shù)”沒有類型檢查,就好像一個(gè)函數(shù)模板似的,沒有模板那么安全就是了。但是這樣做的話存在隱患,例子如下:#defineAdd(a,b)a+b;如果遇到如:c*Add(a,b)*d的時(shí)候就會(huì)出現(xiàn)問(wèn)題。另外舉一個(gè)例子:#definepin(int*);pina,b;本意是a和b都是int型指針,但是

2、實(shí)際上變成int*a,b;a是int型指針,而b是int型變量。這時(shí)應(yīng)該使用typedef來(lái)代替define,這樣a和b就都是int型指針了。我們?cè)诙x的時(shí)候,養(yǎng)成一個(gè)良好的習(xí)慣,建議所有的層次都要加括號(hào)。3.宏的單行定義(少見用法)#defineA(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中的宏

3、定義(非常的經(jīng)典,雖然讓人看了惡心)#defineMACRO(arg1,arg2)do{/*declarations*/stmt1;stmt2;/*...*/}while(0)/*(notrailing;)*/關(guān)鍵是要在每一個(gè)換行的時(shí)候加上一個(gè)""5.在大規(guī)模的開發(fā)過(guò)程中,特別是跨平臺(tái)和系統(tǒng)的軟件里,define最重要的功能是條件編譯。就是:#ifdefWINDOWS............#endif#ifdefLINUX............#endif可以在編譯的時(shí)候通過(guò)#de

4、fine設(shè)置編譯環(huán)境。6.如何定義宏、取消宏#define[MacroName][MacroValue]//定義宏#undef[MacroName]//取消宏#definePI(3.1415926)//普通宏#definemax(a,b)((a)>(b)?(a),(b))//帶參數(shù)的宏7.條件編譯#ifdefXXX…(#else)…#endif例如#ifdefDV22_AUX_INPUT#defineAUX_MODE3#else#defineAUY_MODE3#endif#ifndefXXX…(#

5、else)…#endif8.防止一個(gè)頭文件被重復(fù)包含由于頭文件包含可以嵌套,那么C文件就有可能多次包含同一個(gè)頭文件,就可能出現(xiàn)重復(fù)定義的問(wèn)題的。通過(guò)條件編譯開關(guān)來(lái)避免重復(fù)包含(重復(fù)定義)例如#ifndef__headerfileXXX__#define__headerfileXXX__…//文件內(nèi)容…#endif?Instances:1.防止一個(gè)頭文件被重復(fù)包含#ifndefCOMDEF_H#defineCOMDEF_H?//頭文件內(nèi)容#endif當(dāng)你所建的工程有多個(gè)源文件組成時(shí),很可能會(huì)在多個(gè)文

6、件里頭包含了同一個(gè)頭文件,如果借用上面的宏定義就能夠避免同一個(gè)頭文件被重復(fù)包含時(shí)進(jìn)行多次編譯。因?yàn)楫?dāng)它編譯第一個(gè)頭文件時(shí)總是沒有定義#defineCOMDEF_H,那么它將編譯一遍頭文件中所有的內(nèi)容,包括定義#defineCOMDEF_H。這樣編譯再往下進(jìn)行時(shí)如果遇到同樣要編譯的頭文件,那么由于語(yǔ)句#ifndefCOMDEF_H的存在它將不再重復(fù)的編譯這個(gè)頭文件。2.重新定義一些類型,防止由于各種平臺(tái)和編譯器的不同,而產(chǎn)生的類型字節(jié)數(shù)差異,方便移植。typedef??unsignedchar???

7、???boolean;????/*Booleanvaluetype.*/typedef??unsignedlongint??uint32;??????/*Unsigned32bitvalue*/typedef??unsignedshort????uint16;??????/*Unsigned16bitvalue*/typedef??unsignedchar??????uint8;??????/*Unsigned8??bitvalue*/typedef??signedlongint????int32

8、;??????/*Signed32bitvalue*/typedef??signedshort??????int16;??????/*Signed16bitvalue*/typedef??signedchar????????int8;????????/*Signed8??bitvalue*///下面的不建議使用typedef??unsignedchar????byte;????????/*Unsigned8??bitvaluetype.*/typedef??unsignedshor

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

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

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