在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    C語(yǔ)言嵌套宏的展開(kāi)規(guī)則

    一般的宏嵌套展開(kāi)規(guī)則是由內(nèi)向外,先將內(nèi)層宏展開(kāi),再把外層宏展開(kāi):

    #include #define A(x) (x + 5)#define B(x) (x * 5)void main(void){ printf(“%dr”, B(A(2)));}

    輸出:

    35

    嵌套宏B(A(2))會(huì)先展開(kāi)為B((2 + 5)),然后再展開(kāi)為((2 + 5) * 5),所以最終結(jié)果為35


    如果宏的參數(shù)直接帶有#,則不會(huì)展開(kāi)內(nèi)層的嵌套宏

    #include #define STR(x) #x#define TO_STR(x) STR(x)#define ADD(a, b) (a + b)void main(void){ printf(“%sr”, STR(ADD(3, 4))); printf(“%sr”, TO_STR(ADD(3, 4)));}

    輸出:

    ADD(3, 4)(3 + 4)

    因?yàn)镾TR宏的參數(shù)直接帶有#,所以STR內(nèi)部嵌套的內(nèi)容不會(huì)被進(jìn)一步展開(kāi),故STR(ADD(3, 4))輸出為ADD(3, 4);

    因?yàn)門(mén)O_STR宏的內(nèi)容并沒(méi)有#,所以嵌套的宏ADD(3, 4)依舊可以展開(kāi),故TO_STR(ADD(3, 4))輸出結(jié)果為(3 + 4);


    如果宏的參數(shù)直接帶有##,則會(huì)先將參數(shù)通過(guò)##拼接,然后再依次進(jìn)行展開(kāi)

    #include #define STR(x)#x#define TO_STR(x)STR(x)#define DEF_VAR(a)var_##a#define PARAM(x)param_##xvoid main(void){ printf(“%sr”, TO_STR(DEF_VAR(PARAM(10))));}

    輸出:

    var_PARAM(10)

    由于DEF_VAR中帶有##所以會(huì)先將里面的內(nèi)容使用##拼接,所以會(huì)最先展開(kāi)為T(mén)O_STR(var_PARAM(10)),由于展開(kāi)后PARAM(10)已經(jīng)變成了var_PARAM(10),已經(jīng)不是有效的宏了,所以最終再經(jīng)過(guò)TO_STR的轉(zhuǎn)換后,結(jié)果就是var_PARAM(10)

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年7月4日 18:08
    下一篇 2022年7月4日 18:08

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息