我想做这样的事情:
class SomeClass { };
GENERATE_FUNTION(SomeClass)
GENERATE_FUNCTION
宏我想定义一个函数,其名称由宏参数决定。在这种情况下,我希望它定义一个函数func_SomeClass
。怎么办?
答案 0 :(得分:30)
#define GENERATE_FUNCTION(Argument) void func_##Argument(){ ... }
更多信息: http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation
答案 1 :(得分:5)
正如大家所说,您可以使用令牌粘贴在宏中构建名称,方法是将##
放在需要加入令牌的位置。
如果预处理器支持可变参数宏,您也可以包含返回类型和参数列表:
#define GENERATE_FUNCTION(RET,NAM,...) RET func_##NAM(__VA_ARGS__)
..所以,例如:
GENERATE_FUNCTION(int,SomeClass,int val)
..将扩展为:
int func_SomeClass(int val)
答案 2 :(得分:4)
#define GENERATE_FUNCTION(class_name) func_##class_name##