C预处理程序,将宏的结果字符串化

我想将宏扩展的结果字符串化。


我尝试了以下方法:


#define QUOTE(str) #str

#define TEST thisisatest

#define TESTE QUOTE(TEST)

当我尝试获取“ thisisatest”时,TESTE扩展为:“ TEST”。我知道这是预处理程序的正确行为,但是有人可以帮助我实现另一种方法吗?


Using TESTE #TEST is not valid

Using TESTE QUOTE(thisisatest) is not what I'm trying to do


千万里不及你
浏览 418回答 2
2回答

心有法竹

像这样:#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() {&nbsp; &nbsp; printf(TESTE);}原因是当将宏参数替换为宏主体时,除非它们与该宏中的#或##预处理运算符一起出现,否则它们将被扩展。因此,str(TEST在代码中带有值)不会在中扩展QUOTE,而是会在中扩展EXPAND_AND_QUOTE。

开满天机

为了进一步说明,基本上使预处理器执行另一个“阶段”。即:第一种情况:->TESTE->QUOTE(TEST) # preprocessor encounters QUOTE&nbsp;&nbsp;# first so it expands it *without expanding its argument*&nbsp;&nbsp;# as the '#' symbol is used->TEST第二种情况:->TESTE->EXPAND_AND_QUOTE(TEST)->QUOTE(thisisatest)&nbsp;&nbsp; # after expanding EXPAND_AND_QUOTE&nbsp; # in the previous line&nbsp; # the preprocessor checked for more macros&nbsp; # to expand, it found TEST and expanded it&nbsp; # to 'thisisatest'->thisisatest
打开App,查看更多内容
随时随地看视频慕课网APP