#define的高级用法
生活随笔
收集整理的這篇文章主要介紹了
#define的高级用法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
來源:嵌入式大雜燴
地址:https://blog.csdn.net/xiaoxu2050/article/details/82893476
一、宏的定義與撤銷
需要注意的是:
(1)宏定義應注意添加括號,這樣語義會比較清晰。
(2)使用#undef可以撤銷宏定義。
(3)引號中的宏定義不會被替換。
(4)宏定義的宏名必須是合法的標識符。
(5)宏定義中單、雙引號必須成對出現。
二、帶有參數的宏定義
需要注意的是:
(1)宏調用時參數的個數要與定義時相同。
三、跨行的宏定義,使用反斜杠 ?分隔
四、三個特殊符號:#,##,#@
五、常見的宏定義
1、防止頭文件被重復包含
2、得到指定地址上的一個字節值或字值
3、得到一個field在結構體(struct)中的偏移量
#define?OFFSETOF(?type,?field?)?(?(size_t)?&((?type?*)?0)->?field?)4、得到一個結構體中field所占用的字節數?
#define?FSIZ(?type,?field?)?sizeof(?((type?*)?0)->field?)5、得到一個變量的地址(word寬度)?
#define?B_PTR(var)?(?(byte?*)?(void?*)?&(var)?)? #define?W_PTR(var)?(?(word?*)?(void?*)?&(var)?)6、將一個字母轉換為大寫
#define?UPCASE(c)?(?((c)?>=?'a'?&&?(c)?<=?'z')???((c)?-?0x20)?:?(c)?)7、判斷字符是不是10進制的數字
#define?DECCHK(c)?((c)?>=?'0'?&&?(c)?<=?'9')8、判斷字符是不是16進制的數字
#define?HEXCHK(c)?(((c)?>=?'0'?&&?(c)?<=?'9')?||((c)?>=?'A'?&&?(c)?<=?'F')?||((c)?>=?'a'?&&?(c)?<=?'f'))9、防止溢出的一個方法
#define?INC_SAT(val)?(val?=?((val)+1?>?(val))???(val)+1?:?(val))10、返回數組元素的個數?
#define?ARR_SIZE(a)?(?sizeof((a))?/?sizeof((a[0]))?)文章轉自黃工的公眾號,strongerHuang
掃碼或長按關注
回復「?加群?」進入技術群聊
總結
以上是生活随笔為你收集整理的#define的高级用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 定时任务 全局变量_APS
- 下一篇: html手机验证码登录页面代码,html