2 回答

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個贊
是的,有保證。
之所以可以使用它,是因?yàn)楹甑膮?shù)本身是宏擴(kuò)展的,除非宏參數(shù)名稱出現(xiàn)在宏主體中且?guī)в凶址畼?biāo)識符#或令牌標(biāo)記##。
6.10.3.1/1:
...確定了調(diào)用類似函數(shù)的宏的參數(shù)后,將進(jìn)行參數(shù)替換。替換列表中的參數(shù),除非在?;?#預(yù)處理令牌之前或在##預(yù)處理令牌之后(請參見下文),否則在擴(kuò)展其中包含的所有宏之后,將用相應(yīng)的參數(shù)替換...
因此,如果這樣做,STR1(THE_ANSWER)則會得到“ THE_ANSWER”,因?yàn)镾TR1的參數(shù)未進(jìn)行宏擴(kuò)展。然而,STR2的參數(shù)是當(dāng)它代入STR2的定義中,其因此給出STR1的參數(shù)宏擴(kuò)展42,與“42”的結(jié)果。

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個贊
正如史蒂夫(Steve)所指出的那樣,這是有保證的,并且自C89標(biāo)準(zhǔn)以來一直得到保證-該標(biāo)準(zhǔn)是將宏中的#和##運(yùn)算符整理成代碼的標(biāo)準(zhǔn),并強(qiáng)制遞歸擴(kuò)展args中的宏,然后且僅當(dāng)且僅當(dāng)主體不對參數(shù)應(yīng)用#或##。在這方面,C99與C89相同。
- 2 回答
- 0 關(guān)注
- 363 瀏覽
添加回答
舉報