第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

確切地說,雙字符串技巧是如何工作的?

確切地說,雙字符串技巧是如何工作的?

C
qq_遁去的一_1 2019-10-06 12:58:45
至少某些C預(yù)處理程序可讓您將宏的值(而不是其名稱)通過一個類似于函數(shù)的宏傳遞給另一個對其進(jìn)行字符串化的宏:#define STR1(x) #x#define STR2(x) STR1(x)#define THE_ANSWER 42#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */這里的示例用例。這確實(shí)有效,至少在GCC和Clang(都與中-std=c99)中都有效,但是我不確定它在C標(biāo)準(zhǔn)術(shù)語下如何工作。C99是否可以保證這種行為?如果是這樣,C99如何保證?如果不是,行為在什么時候從C定義變?yōu)镚CC定義?
查看完整描述

2 回答

?
BIG陽

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é)果。


查看完整回答
反對 回復(fù) 2019-10-06
?
冉冉說

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相同。


查看完整回答
反對 回復(fù) 2019-10-06
  • 2 回答
  • 0 關(guān)注
  • 363 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號