如何定义参数位于行开头的宏(或其解决方法)?
#define SINGLETON_IMPLEMENTATION(className) \
##className* ##className::instance_ = NULL;
这给出了编译器警告(GCC 3.2.3):“'##'不能出现在宏扩展的任何一端”
答案 0 :(得分:12)
您只需要##将参数附加到另一个字符串。你的宏可以重铸为
#define SINGLETON_IMPLEMENTATION(className) \
className* className::instance_ = NULL;
答案 1 :(得分:6)
##
是连接运算符;编译器只是抱怨这一点
你不能在没有任何东西之前连接一个令牌,即在宏扩展开始时;只是尝试删除第二行开头的##
第二个##
似乎也错了。如果您只想初始化单例指针,请从宏中删除##
。