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

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

字符串化 - 它是如何工作的?

字符串化 - 它是如何工作的?

C++ C
炎炎設(shè)計(jì) 2019-09-02 08:56:45
我知道:#define foo 4  #define str(s) #s與str(foo)寫出:"foo"因?yàn)樽址牡谝粋€(gè)文本擴(kuò)展的執(zhí)行,但這樣的: #define xstr(s) str(s) #define str(s) #s #define foo 4與xstr(foo)寫出:"4"。為什么?該過程涉及哪些步驟?
查看完整描述

2 回答

?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

宏觀擴(kuò)張的相關(guān)步驟是(根據(jù)C 2011 [n1570] 6.10.3.1和C ++ 1998 16.3.1):

  1. 處理前綴為#或的處理令牌##。

  2. 將宏替換應(yīng)用于每個(gè)參數(shù)。

  3. 將每個(gè)參數(shù)替換為上述宏替換的相應(yīng)結(jié)果。

  4. 重新掃描更多宏。

因此,xstr(foo)我們有:

  1. 替換文本,str(s)包含no ###,因此沒有任何反應(yīng)。

  2. 參數(shù)foo被替換為4,所以就好像xstr(4)已經(jīng)被使用了一樣。

  3. 在替換文本中str(s),參數(shù)s替換為4,生成str(4)

  4. str(4)重新掃描。(由此產(chǎn)生的步驟產(chǎn)生”4”。)

請注意,問題str(foo)在于步驟2將替換foo4步驟1,它將參數(shù)更改為字符串。在步驟1中,foo仍然是foo; 它沒有被替換4,所以結(jié)果是”foo”

這就是使用輔助宏的原因。它允許我們執(zhí)行第2步,然后使用另一個(gè)宏執(zhí)行第1步。


查看完整回答
反對 回復(fù) 2019-09-02
?
蠱毒傳說

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊

第一個(gè)案例

評價(jià)str(foo):替換str(foo)用#foo,即"foo"

第二種情況

評價(jià)xstr(foo):替換xstr(foo)用str(<foo-value>),即str(4)

評價(jià)str(4):替換str(4)用#4,即"4"

通常,

預(yù)處理器評估擴(kuò)展宏變量的宏函數(shù),直到它無需評估:


如果你定義


#define xstr(s) str(s) + 1

#define str(s) s + 1

在以下代碼中


#define foo 4


int main()

{

    std::cout << str(foo) << '\n' 

              << xstr(foo) << '\n' ;


它會(huì)評估像


第一串

替補(bǔ)str(foo)有<foo-value> + 1,即4 + 1

沒有什么可以替代的。精加工。

結(jié)果是4 + 1


第二串

替補(bǔ)xstr(foo)有str(<foo-value>) + 1,即str(4) + 1

替補(bǔ)str(4)有<4-value> + 1,即4 + 1

沒有什么可以替代的。

結(jié)果是4 + 1 + 1


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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