我的函数(ansi c)在其定义中是递归的。因此,它的形式为:
void function_2(int *value){
/*this is the base function*/
}
void function_4(int *value){
function_2(value);
function_2(value);
/*other operations*/
}
void function_8(int *value){
function_4(value);
function_4(value);
/*other operations*/
}
等等。 要创建这些函数,我正在创建宏,例如:
#define FUNCTION( m, h)\
void function_##m(int *value){\
function_##h(value);\
function_##h(value);\
/*other operations\
};
然后我按如下方式做出声明:
FUNCTION(4,2)
FUNCTION(8,4)
请注意,第二个宏参数(h)始终是第一个宏参数(m)的值的一半。有没有任何方法,所以我只能使用一个参数(m)来制作宏,而不是使用它,所以当我连接它时(使用##)我可以使用“m / 2”而不是h?
它应该是:
function_##m/2(value);\
答案 0 :(得分:1)
您不能像您想要的那样使用编译时计算和令牌粘贴。另一方面,如果/*other operations*/
相同且仅m
的值发生变化,则最好将m
变为参数,而不是使用宏来定义许多函数。
您可以使其类似于以下内容:
void function(int m, int *value) {
if ( m == 2 ) {
/*run base code*/
} else {
function(m/2, value);
function(m/2, value);
/*other operations*/
}
}