我正在生成一些编译时代码。我需要根据宏布尔值将后缀附加到生成的函数名称。后缀要么存在,要么为空。如何做到这一点?
#define FUNC_NAME(name, hasSuffix) name ## MAYBE_SHOW_SUFFIX(hasSuffix)
FUNC_NAME(foo, true); // would generate: foo_
FUNC_NAME(foo, false); // would generate: foo
利用宏展开的结果再次展开的事实:
#define WITHSUFFIX_true(name) name ## _
#define WITHSUFFIX_false(name) name
#define FUNC_NAME(name, hasSuffix) WITHSUFFIX_ ## hasSuffix(name)
FUNC_NAME(foo, true); // would generate: foo_
FUNC_NAME(foo, false); // would generate: foo
结果
foo_;
foo;