一.預(yù)定義符號(hào)
C標(biāo)準(zhǔn)定義了如下五個(gè)預(yù)處理符號(hào)
在文件輸入輸出以及輸出日志等場(chǎng)合下我們會(huì)用到這些預(yù)處理符號(hào),比如
\+回車(chē) : 續(xù)行符,轉(zhuǎn)義字符,后面不能加任何除回車(chē)之外的字符,否則會(huì)報(bào)錯(cuò)
二.#define關(guān)鍵字
#define有兩個(gè)作用,一個(gè)是定義標(biāo)識(shí)符,第二個(gè)是定義宏
1.定義標(biāo)識(shí)符
不要在define定義的標(biāo)識(shí)符里加分號(hào)
2.定義宏
#define機(jī)制包括一個(gè)規(guī)定,允許把參數(shù)替換到文本中,這種實(shí)現(xiàn)通常叫做宏或定義宏
宏定義永遠(yuǎn)不要吝嗇括號(hào),防止因?yàn)閮?yōu)先級(jí)的問(wèn)題導(dǎo)致出現(xiàn)不可思議的后果 宏不能實(shí)現(xiàn)遞歸 宏只文本替換,并不簡(jiǎn)化計(jì)算 字符串中的內(nèi)容不會(huì)發(fā)生宏替換
3.#和 ##
編譯器會(huì)自動(dòng)就兩個(gè)相鄰字符串自動(dòng)連接成一個(gè)
#:把參數(shù)插入到字符串中
#a -> “a”
##可以把位于它兩邊的符號(hào)拼成一個(gè)符號(hào)
4.宏和函數(shù)對(duì)比
①宏沒(méi)有類(lèi)型檢查
沒(méi)有類(lèi)型檢查是宏的一大特點(diǎn)(但同時(shí)也是不安全的隱患),可以完成很多函數(shù)不可能做到的功能
②宏沒(méi)有函數(shù)的調(diào)用和返回等額外開(kāi)銷(xiāo),效率更高,
但是當(dāng)邏輯復(fù)雜并且代碼量巨大時(shí),調(diào)用和返回的開(kāi)銷(xiāo)和運(yùn)算的時(shí)間相比微乎其微,可以省略
③宏單純只是文本替換,不能進(jìn)行調(diào)試,很致命
④宏可能會(huì)使代碼長(zhǎng)度增長(zhǎng)
⑤函數(shù)的參數(shù)如果是一個(gè)表達(dá)式,會(huì)計(jì)算出表達(dá)式的結(jié)果傳入?yún)?shù)
宏的參數(shù)如果是一個(gè)表達(dá)式,只會(huì)文本替換,不會(huì)進(jìn)行計(jì)算
總結(jié):各有千秋,小代碼量使用宏,大代碼量使用函數(shù),C++中擯棄宏這一概念,使用內(nèi)聯(lián),基于優(yōu)缺點(diǎn),最好不要使用宏
5.帶有副作用的宏參數(shù)
不要給宏參數(shù)傳入帶有副作用的參數(shù)
6.命名約定
宏:全部大寫(xiě)
函數(shù): 不全部大寫(xiě)
例外
#undef name //取消宏標(biāo)識(shí)符name的定義
三.條件編譯
1.如果定義了DEBUG,語(yǔ)句執(zhí)行,反之,不執(zhí)行
2.條件編譯
3.多分支條件編譯
3.判斷是否被定義
4.嵌套指令
預(yù)處理指令可以進(jìn)行嵌套
四.其它
1.頭文件的包含
2.#error “…”
遇到#error便會(huì)產(chǎn)生一個(gè)編譯錯(cuò)誤
3.strcpy();
源字符串必須以’/0’結(jié)束,返回目標(biāo)字符串地址且這個(gè)函數(shù)不管目標(biāo)空間是否放得下返回的目標(biāo)字符串
4.assert(條件語(yǔ)句)
善用斷言,頭文件為
5.鏈?zhǔn)椒磻?yīng)
這次函數(shù)的返回值可以作為下一個(gè)函數(shù)的參數(shù),達(dá)到鏈?zhǔn)椒磻?yīng)的效果
printf(“%d\n”,strlen(strcpy(p,”hello world!”)));
6.常見(jiàn)錯(cuò)誤:
編譯型錯(cuò)誤
直接看編譯器錯(cuò)誤提示信息即可 鏈接型錯(cuò)誤
函數(shù)名,變量名寫(xiě)錯(cuò),庫(kù)文件使用錯(cuò)誤(第三方庫(kù)) 運(yùn)行時(shí)錯(cuò)誤
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7614瀏覽量
137734 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49289
原文標(biāo)題:C語(yǔ)言#define關(guān)鍵字,條件編譯及預(yù)定義符號(hào)知識(shí)詳解
文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論