




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第C語言#define定義宏的使用詳解目錄1.宏是什么2.宏的用法3.宏的注意事項4.宏和函數(shù)的區(qū)別5.命名要求6.條件編譯常見條件編譯指令及應(yīng)用場景
1.宏是什么
語法:
parament-list:是一個由逗號隔開的符號表。
2.宏的用法
#defineSUM(x,y)((x)+(y))
intmain()
inta=10;
intb=20;
intret=SUM(a,b);
printf("%d\n",ret);
return0;
簡要說明:宏已經(jīng)被替換
分位三個階段:預(yù)編譯、編譯、匯編
3.宏的注意事項
定義什么替換什么
來看這一例:
#defineNUM(x,y)x+y
intmain()
inta=2;
intb=3;
printf("%d\n",NUM(a,b)*NUM(a,b));
//結(jié)果:11
return0;
原因:num(a,b)*num(a,b)=a+b*a+b=11
4.宏和函數(shù)的區(qū)別
屬性#define定義宏函數(shù)代碼長度如果多次調(diào)用,多次替換,如果是大長度宏其長度很長函數(shù)只實現(xiàn)一次可以多次使用,如果多次調(diào)用,長度只有一份執(zhí)行速度更快函數(shù)調(diào)用和開辟都會有額外開銷操作符優(yōu)先級必須每個參數(shù)加上括號,否則操作符優(yōu)先級可能會產(chǎn)生不可預(yù)料的后果函數(shù)參數(shù)只在函數(shù)調(diào)用的時候求值一次,它的結(jié)果值傳遞給函數(shù)。表達式的求值結(jié)果更容易預(yù)測帶有副作用參數(shù)多次調(diào)用宏會有不可預(yù)料的后果函數(shù)參數(shù)只在傳參的時候求值一次,結(jié)果更容易控制,只需關(guān)注是傳值還是傳址參數(shù)類型宏的參數(shù)和類型無關(guān),可以使用與任何參數(shù)類型函數(shù)參數(shù)與類型有關(guān),類型取決于使用目的,傳值,傳址,還是拿一個字節(jié)數(shù)據(jù)char*調(diào)試不方便調(diào)試,編譯期間就已經(jīng)替換可調(diào)試遞歸不可遞歸可遞歸
宏帶副作用參數(shù):
#defineMAX(a,b)((a)(b)(a):(b))
intmain()
intx=5;
inty=8;
intz=MAX(x++,y++);
printf("x=%dy=%dz=%d\n",x,y,z);//輸出的結(jié)果是什么
return0;
//((x++)(y++)(x++):(y++))
//輸出結(jié)果:x=6,y=10,z=9
5.命名要求
宏名必須大寫
函數(shù)不要全部大寫
6.條件編譯
常見條件編譯指令及應(yīng)用場景
1.單分支
編譯指令:
?//
應(yīng)用場景:
intmain()
#if42
printf("helloworld!\n");
#endif
return0;
//輸出helloworld
2.多分支
編譯指令:
?//
?//
?//
應(yīng)用場景:
intmain()
#if12
printf("xixi\n");
#elif43
printf("haha\n");
#else
printf("heihei\n");
#endif
return0;
//輸出結(jié)果:haha
可不能和ifelse選擇語句混淆,多分支條件編譯從上往下走,如果有一個分支成立,后面分支就不再執(zhí)行;但是選擇語句是從上往下走,有一個分支成立,繼續(xù)查看后面分支是否成立
3.判斷是否被定義
編譯指令:
1.#ifdefined(symbol)或#ifdefsymbol
2.#if!defined(symbol)或#ifndefsymbol
應(yīng)用場景:
```c
#defineDEF
intmain()
#ifdefined(DEF)
printf("haha\n");
#endif
#ifdefMAX
printf("heihei\n");
#endif
return0;
//輸出結(jié)果:haha
```
4.嵌套指令
編譯指令
//操作
//操作
條件編譯指令也支持嵌套,注意#endif結(jié)束本次嵌套
5.刪除宏定義
編譯指令:
應(yīng)用場景:
#defineDEF
intmain()
#undefDEF//刪除DEF宏定義了
#ifdefDE
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二年級下冊春天花朵課件語
- 2025年勞務(wù)員之勞務(wù)員基礎(chǔ)知識過關(guān)檢測試卷B卷附答案
- 猜謎課件圖片大全小學(xué)生
- 2024新春年貨節(jié)民俗文化展示活動方案
- 府君山天橋工程可行性研究報告
- 商住樓設(shè)計規(guī)范
- 江西招聘考試試題及答案
- 智慧工地考試試題及答案
- 水果主題活動方案
- 創(chuàng)新創(chuàng)業(yè)項目計劃書親子
- 項目部職責牌
- 車輛采購、維修服務(wù)投標方案
- 藥劑科病房麻醉藥品精神藥品處方流程
- 營銷策劃模版課件
- 智慧樓宇設(shè)計方案.pdf
- 外架懸挑防護棚施工方案完整
- (精選)社區(qū)管理網(wǎng)上形成性考核作業(yè)
- 以天然氣制合成氣的工藝
- 設(shè)備計算與選型——孫景海
- 恩格勒系統(tǒng)整理17頁
- JGJ_T487-2020建筑結(jié)構(gòu)風振控制技術(shù)標準(高清-最新版)
評論
0/150
提交評論