來(lái)源:嵌入式大雜燴
地址:https://blog.csdn.net/xiaoxu2050/article/details/82893476
一、宏的定義與撤銷

需要注意的是:
(1)宏定義應(yīng)注意添加括號(hào),這樣語(yǔ)義會(huì)比較清晰。
(2)使用#undef可以撤銷宏定義。
(3)引號(hào)中的宏定義不會(huì)被替換。
(4)宏定義的宏名必須是合法的標(biāo)識(shí)符。
(5)宏定義中單、雙引號(hào)必須成對(duì)出現(xiàn)。
二、帶有參數(shù)的宏定義

需要注意的是:
(1)宏調(diào)用時(shí)參數(shù)的個(gè)數(shù)要與定義時(shí)相同。
三、跨行的宏定義,使用反斜杠 分隔

四、三個(gè)特殊符號(hào):#,##,#@

五、常見的宏定義
1、防止頭文件被重復(fù)包含

2、得到指定地址上的一個(gè)字節(jié)值或字值

3、得到一個(gè)field在結(jié)構(gòu)體(struct)中的偏移量
#defineOFFSETOF(type,field)((size_t)&((type*)0)->field)
4、得到一個(gè)結(jié)構(gòu)體中field所占用的字節(jié)數(shù)
#defineFSIZ(type,field)sizeof(((type*)0)->field)
5、得到一個(gè)變量的地址(word寬度)
#defineB_PTR(var)((byte*)(void*)&(var)) #defineW_PTR(var)((word*)(void*)&(var))
6、將一個(gè)字母轉(zhuǎn)換為大寫
#defineUPCASE(c)(((c)>='a'&&(c)<=?'z')???((c)?-?0x20)?:?(c)?)
7、判斷字符是不是10進(jìn)制的數(shù)字
#defineDECCHK(c)((c)>='0'&&(c)<=?'9')
8、判斷字符是不是16進(jìn)制的數(shù)字
#defineHEXCHK(c)(((c)>='0'&&(c)<=?'9')?||((c)?>='A'&&(c)<=?'F')?||((c)?>='a'&&(c)<=?'f'))
9、防止溢出的一個(gè)方法
#defineINC_SAT(val)(val=((val)+1>(val))?(val)+1:(val))
10、返回?cái)?shù)組元素的個(gè)數(shù)
#defineARR_SIZE(a)(sizeof((a))/sizeof((a[0])))
-
嵌入式
+關(guān)注
關(guān)注
5210文章
20679瀏覽量
337332 -
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7646瀏覽量
146193
發(fā)布評(píng)論請(qǐng)先 登錄
CET消防設(shè)備電源監(jiān)控系統(tǒng)簡(jiǎn)介
變頻器的特殊用法
安達(dá)發(fā)|煤炭行業(yè)APS高級(jí)排產(chǎn):開啟高效生產(chǎn)新時(shí)代
嵌入式開發(fā)中一些少用的C語(yǔ)言用法分享
開源鴻蒙高級(jí)人才認(rèn)證共建會(huì)議圓滿舉辦
DLPC150數(shù)字控制器:用于高級(jí)光控的理想之選
#define預(yù)編譯的指令
普源DS4000E示波器高級(jí)觸發(fā)功能使用指南
小安派BW21-CBV-Kit入門教程之看門狗簡(jiǎn)介
#define的高級(jí)用法簡(jiǎn)介
評(píng)論