5

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

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

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

4

2 回答 2

13

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

#define SINGLETON_IMPLEMENTATION(className) \
    className* className::instance_ = NULL;
于 2009-03-23T09:10:26.527 回答
8

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

于 2009-03-23T09:08:59.057 回答