C語(yǔ)言宏定義

1、一般定義

//定義常量
#define pi 3.1415926  

//定義表達(dá)式
#define add(a, b) a+b    
#define max(a, b) (a>b)?a:b

//復(fù)雜表達(dá)式最好用括號(hào)括起來(lái), 防止出錯(cuò)
#define mul(a, b) (a)*(b)
mul(1+a, 2+b)  //會(huì)解析成:(1+a)*(2+b)

#define mul(a, b) a*b
mul(1+a, 2+b)  //會(huì)解析成:1+a*2+b

2、條件判斷

#if defined true           //判斷是否定義
#undef true                 //如果定義了取消定義
#define true 1             //重新定義
#endif                         //if結(jié)束

#ifdef true      //#ifdef是#if defined的簡(jiǎn)寫
#endif

#if !defined true         //如果未定義
#define true 1
#endif

#ifndef true          //如果未定義  #ifndef是if !defined的縮寫
#define true 1
#endif

3、編譯時(shí)錯(cuò)誤信息

#ifndef true
#error undefined true    //定義的錯(cuò)誤信息不需要引號(hào)
#endif

4、系統(tǒng)常見(jiàn)自定義宏

__FILE__                    當(dāng)前編輯的文件
__FUNCTION__          點(diǎn)前的函數(shù)名
__LINE__                    行號(hào)
__DATE__                    日期
__TIME__                      時(shí)間

5、宏參數(shù)的字符串化和宏參數(shù)的連接

字符串化:
#define STR(s) #s
printf("%s %s %s\n", STR(abc), STR('abc'), STR("abc"));
如果:
#define STR1(s) s
printf("%s\n", STR1("abc"));  //正確
printf("%s\n", STR1(abc));   //需要提前定義abc
printf("%s\n", STR1("abc"));   //需要提前定義'abc'

參數(shù)連接:
#define CON(a, b) a##b
printf("%d\n", CON(12, 34));    //輸出1234
char *abcd = "test123";
printf("%s\n", CON(ab, cd));    //輸出test123
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 姓名:呂彬 學(xué)號(hào):1613014035 【嵌牛導(dǎo)讀】#define 宏定義是個(gè)演技非常高超的替身演員,但也會(huì)經(jīng)常耍...
    傻彬兒閱讀 1,359評(píng)論 0 1
  • 最近在查找激光甲烷遙測(cè)儀有些主控板啟動(dòng)不了的原因時(shí),順便研究了TMS320VC5509A和STM32F407之間通...
    華杰研習(xí)社閱讀 982評(píng)論 0 3
  • 宏定義指令 (# define)用來(lái)定義一個(gè)標(biāo)識(shí)符和一個(gè)字符串,以這個(gè)標(biāo)識(shí)符來(lái)代表這個(gè)字符串。 不帶參數(shù)的宏定義:...
    大魚魚閱讀 1,092評(píng)論 0 0
  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,492評(píng)論 0 13
  • 相信大家在日常生活中都用過(guò)各種備忘錄或者提醒工具吧,有時(shí)候是不是感覺(jué)用起來(lái)很繁瑣,特別是需要很多條備忘的時(shí)候。所以...
    最美應(yīng)用閱讀 798評(píng)論 0 4

友情鏈接更多精彩內(nèi)容