亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

C預處理程序,將宏的結果字符串化

C預處理程序,將宏的結果字符串化

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

2 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

像這樣:


#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);

}

原因是當將宏參數替換為宏主體時,除非它們與該宏中的#或##預處理運算符一起出現,否則它們將被擴展。因此,str(TEST在代碼中帶有值)不會在中擴展QUOTE,而是會在中擴展EXPAND_AND_QUOTE。


查看完整回答
反對 回復 2019-10-10
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

為了進一步說明,基本上使預處理器執行另一個“階段”。即:


第一種情況:


->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


查看完整回答
反對 回復 2019-10-10
  • 2 回答
  • 0 關注
  • 437 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號