我可以将整数变量附加到宏定义的函数吗?

时间:2014-05-05 08:51:40

标签: c++

我想使用宏将整数变量附加到函数名称,但以下代码不起作用:

#define TEST(num) test_##num()

void test_0(void){ /* some code here*/ }

void somefunc(){
   int somevar = 0;
   TEST(somevar);
}

这最终会调用test_somevar()。

我知道你可以制作一个数字枚举并使用该列表,但我不想这样做,因为它有点挫败了我试图做的目的。

有没有办法有效地做到这一点?

3 个答案:

答案 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索引不同的测试。