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

Can I attach an integer variable to a function defined by a macro?

本文关键字:宏定义 函数 整数 变量      更新时间:2023-10-16

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

#define TEST(num) test_##num()
void test_0(void){ /* some code here*/ }
void somefunc(){
   int somevar = 0;
   TEST(somevar);
}

最后调用testrongomevar()。

我知道你可以创建一个数字的枚举并使用这个列表,但我不想这样做,因为它违背了我想要做的目的。

是否有一种方法可以有效地做到这一点?

运行时值不能被预处理器使用/看到,但您可以使用函数数组来做到这一点:

int main(int argc, char *argv[]) {
    void (*test[1])(void) = { test_0 };
    test[0]();
    return 0;
}

或者,给定数组,您可以定义宏:

#define TEST(x) test[x]()

这不能工作,除非somevar也是一个宏。

原因是因为TEST(somevar)在预处理时被扩展为TEST_somevar(假设您的宏工作正确),而some_var的值直到(至少)编译时才知道,如果不是运行时。

另一种方法是使用一个函数指针数组,然后在该数组中使用一些索引不同的测试。