來源:嵌入式大雜燴
地址:https://blog.csdn.net/xiaoxu2050/article/details/82893476
一、宏的定義與撤銷
需要注意的是:
(1)宏定義應注意添加括號,這樣語義會比較清晰。
(2)使用#undef可以撤銷宏定義。
(3)引號中的宏定義不會被替換。
(4)宏定義的宏名必須是合法的標識符。
(5)宏定義中單、雙引號必須成對出現。
二、帶有參數的宏定義
需要注意的是:
(1)宏調用時參數的個數要與定義時相同。
三、跨行的宏定義,使用反斜杠 分隔
四、三個特殊符號:#,##,#@
五、常見的宏定義
1、防止頭文件被重復包含
2、得到指定地址上的一個字節值或字值
3、得到一個field在結構體(struct)中的偏移量
#defineOFFSETOF(type,field)((size_t)&((type*)0)->field)
4、得到一個結構體中field所占用的字節數
#defineFSIZ(type,field)sizeof(((type*)0)->field)
5、得到一個變量的地址(word寬度)
#defineB_PTR(var)((byte*)(void*)&(var)) #defineW_PTR(var)((word*)(void*)&(var))
6、將一個字母轉換為大寫
#defineUPCASE(c)(((c)>='a'&&(c)<=?'z')???((c)?-?0x20)?:?(c)?)
7、判斷字符是不是10進制的數字
#defineDECCHK(c)((c)>='0'&&(c)<=?'9')
8、判斷字符是不是16進制的數字
#defineHEXCHK(c)(((c)>='0'&&(c)<=?'9')?||((c)?>='A'&&(c)<=?'F')?||((c)?>='a'&&(c)<=?'f'))
9、防止溢出的一個方法
#defineINC_SAT(val)(val=((val)+1>(val))?(val)+1:(val))
10、返回數組元素的個數
#defineARR_SIZE(a)(sizeof((a))/sizeof((a[0])))
-
嵌入式
+關注
關注
5092文章
19178瀏覽量
307694 -
C語言
+關注
關注
180文章
7614瀏覽量
137724
發布評論請先 登錄
相關推薦
keil在Debug的高級用法
![keil在Debug的<b class='flag-5'>高級</b><b class='flag-5'>用法</b>](https://file.elecfans.com/web2/M00/09/16/pYYBAGD0FvWAeWpFAAAb1Fux1oA753.jpg)
Linux lsof命令的基本用法
![Linux lsof命令的基本<b class='flag-5'>用法</b>](https://file1.elecfans.com/web1/M00/F3/7F/wKgaoWcYc2mAFw5cAAA4fI5XmGk856.png)
SV中define宏定義的用法
安達發|APS高級排程高級物料需求計劃
![安達發|APS<b class='flag-5'>高級</b>排程<b class='flag-5'>高級</b>物料需求計劃](https://file1.elecfans.com/web2/M00/F4/09/wKgaomZ74DiAM4lCAACO5q0k_Aw676.png)
鴻蒙Ability Kit(程序框架服務)【UIAbility組件基本用法】
![鴻蒙Ability Kit(程序框架服務)【UIAbility組件基本<b class='flag-5'>用法</b>】](https://file1.elecfans.com/web2/M00/EC/1E/wKgZomZhJtuAGvhjAACAmnpjgBM543.png)
InterfaceDesinger 使用案例-v1 -DDIO用法
![InterfaceDesinger 使用案例-v1 -DDIO<b class='flag-5'>用法</b>](https://file1.elecfans.com/web2/M00/E7/39/wKgZomZLCkqAauAvAAA3UNcvPJ4334.png)
C語言#define的應用
![C語言#<b class='flag-5'>define</b>的應用](https://file1.elecfans.com/web2/M00/C3/B9/wKgaomXn42eACLumAAAag1PydyU214.png)
AWTK 開源串口屏開發(10) - 告警信息的高級用法
![AWTK 開源串口屏開發(10) - 告警信息的<b class='flag-5'>高級</b><b class='flag-5'>用法</b>](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
評論