为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 417 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信