我想使用宏将整数变量附加到函数名称,但以下代码不起作用:
#define TEST(num) test_##num()
void test_0(void){ /* some code here*/ }
void somefunc(){
int somevar = 0;
TEST(somevar);
}
这最终会调用test_somevar()。
我知道你可以制作一个数字枚举并使用该列表,但我不想这样做,因为它有点挫败了我试图做的目的。
有没有办法有效地做到这一点?
答案 0 :(得分:4)
预处理器无法使用/看到运行时值,但您可以使用一组函数来执行此操作:
int main(int argc, char *argv[]) {
void (*test[1])(void) = { test_0 };
test[0]();
return 0;
}
或者,给定数组,您可以定义一个宏:
#define TEST(x) test[x]()
答案 1 :(得分:0)
除非somevar
也是一个宏,否则这不起作用。
原因是因为TEST(somevar)
在预处理时扩展为TEST_somevar
(假设您的宏正常工作),而some_var
的值直到(至少)编译时才知道,如果不是运行时间。
答案 2 :(得分:0)
另一种做你想做的事情的方法是拥有一个函数指针数组,然后在该数组中使用somevar索引不同的测试。