C ++中的宏扩展

时间:2009-03-23 09:03:01

标签: c++ macros

如何定义参数位于行开头的宏(或其解决方法)?

#define SINGLETON_IMPLEMENTATION(className) \
    ##className* ##className::instance_ = NULL;

这给出了编译器警告(GCC 3.2.3):“'##'不能出现在宏扩展的任何一端”

2 个答案:

答案 0 :(得分:12)

您只需要##将参数附加到另一个字符串。你的宏可以重铸为

#define SINGLETON_IMPLEMENTATION(className) \
    className* className::instance_ = NULL;

答案 1 :(得分:6)

##是连接运算符;编译器只是抱怨这一点 你不能在没有任何东西之前连接一个令牌,即在宏扩展开始时;只是尝试删除第二行开头的## 第二个##似乎也错了。如果您只想初始化单例指针,请从宏中删除##