C語言#define定義宏的使用詳解_第1頁
C語言#define定義宏的使用詳解_第2頁
C語言#define定義宏的使用詳解_第3頁
C語言#define定義宏的使用詳解_第4頁
C語言#define定義宏的使用詳解_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論