2017-02-23 91 views
0

如果有一个宏是另一个宏的参数,并且该参数要在宏定义中进行字符串化,是否可以将作为参数的宏但不是其原始值?一个例子如下,字符串化嵌套宏

#define EXAMPLE "original" 
#define CONCATENATE(X) "Concatenate Strings " #X 

CONCATENATE(BYTE) //Results as "Concatenate Strings EXAMPLE" 
        //I need "Concatenate Strings original" 

有没有一种方法可以让我将string的原始值作为参数给出?

+0

可能是一个可能重复这个问题直接关系到一个特定的问题,而其他的书名尚未标题是有点更普遍。 – ugar

回答

1

当生成标记时,字符串化运算符会抑制宏参数扩展。为了强制它,你需要通过一个中间宏来传递参数。

例如,通过使CONCATENATE一个完整的包装:

#define CONCATENATE_(X, Y) X #Y 
#define CONCATENATE(X) CONCATENATE_("Concatenate Strings", X)