首先,有很多关于重载宏的帖子:
etc.
然而,他们都提出了关于变量宏的问题。
我想问的是,以下几点是否可行:
#define FOO 3
#define FOO(a,b) a+b
int main() {
int a = FOO(0,1);
int b = FOO;
std::cout << a + b;
return 0;
}
我也想让它在clang上工作。
在标准C中是否有任何方法--或者使用GNU扩展--将内容附加到宏定义中?例如,给定定义为
#define List foo bar
我是否可以附加bas,使其List展开,就像我定义了它一样
#define List foo bar bas
我希望我能做这样的事:
#define List foo bar bas
#define List_ Expand(List)
#undef List
#define List Expand(List_) quux
但是我不知道如何定义Expand()宏,这样它就可以做我想做的事情了。
动机:,我正按照以下思路与受歧视的/被标记
对于调试构建,我通常使用Clang,因为它可以更好地格式化警告和错误,并且更容易跟踪和修复它们。
但最近,在添加了一个带有可变参数的宏之后,Clang告诉我以下内容(来自一个虚拟项目):
main.cpp:5:20: warning: named variadic macros are a GNU extension [-Wvariadic-macros]
#define stuff3(args...) stuff_i(args)
我知道macroname(args...)在很多编译器上都能很好地编译,包括Visualstudio、Sunstudio,当然还有GCC。但为了确保clang是正