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

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

C預(yù)處理程序,將宏的結(jié)果字符串化

C預(yù)處理程序,將宏的結(jié)果字符串化

C
千萬(wàn)里不及你 2019-10-10 14:30:02
我想將宏擴(kuò)展的結(jié)果字符串化。我嘗試了以下方法:#define QUOTE(str) #str#define TEST thisisatest#define TESTE QUOTE(TEST)當(dāng)我嘗試獲取“ thisisatest”時(shí),TESTE擴(kuò)展為:“ TEST”。我知道這是預(yù)處理程序的正確行為,但是有人可以幫助我實(shí)現(xiàn)另一種方法嗎?Using TESTE #TEST is not validUsing TESTE QUOTE(thisisatest) is not what I'm trying to do
查看完整描述

2 回答

?
心有法竹

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

像這樣:


#include <stdio.h>


#define QUOTE(str) #str

#define EXPAND_AND_QUOTE(str) QUOTE(str)

#define TEST thisisatest

#define TESTE EXPAND_AND_QUOTE(TEST)


int main() {

    printf(TESTE);

}

原因是當(dāng)將宏參數(shù)替換為宏主體時(shí),除非它們與該宏中的?;?#預(yù)處理運(yùn)算符一起出現(xiàn),否則它們將被擴(kuò)展。因此,str(TEST在代碼中帶有值)不會(huì)在中擴(kuò)展QUOTE,而是會(huì)在中擴(kuò)展EXPAND_AND_QUOTE。


查看完整回答
反對(duì) 回復(fù) 2019-10-10
?
開(kāi)滿天機(jī)

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

為了進(jìn)一步說(shuō)明,基本上使預(yù)處理器執(zhí)行另一個(gè)“階段”。即:


第一種情況:


->TESTE

->QUOTE(TEST) # preprocessor encounters QUOTE 

 # first so it expands it *without expanding its argument* 

 # as the '#' symbol is used

->TEST

第二種情況:


->TESTE

->EXPAND_AND_QUOTE(TEST)

->QUOTE(thisisatest) 

  # after expanding EXPAND_AND_QUOTE

  # in the previous line

  # the preprocessor checked for more macros

  # to expand, it found TEST and expanded it

  # to 'thisisatest'

->thisisatest


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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