我在表单中有许多宏
#define F(A,B) Some function of A and B
Run Code Online (Sandbox Code Playgroud)
为了便于阅读,我想为这些宏定义参数,例如
#define C A,B
Run Code Online (Sandbox Code Playgroud)
所以我可以说
F(C)
Run Code Online (Sandbox Code Playgroud)
但预处理器尝试在C之前扩展F并抱怨F需要2个参数.有没有办法让它在扩展F之前扩展C,以便不会发生错误?
您可以使用带有可变数量参数的中间宏:
#define F1(A,B)
#define F(...) F1(__VA_ARGS__)
#define C A,B
int main(void) {
F(C)
F(1,2)
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这应该编译.如果传递多于或少于两个参数,或者没有扩展到两个参数的参数,您仍会遇到编译失败.