在C中使用宏的concat代码

这是事情:

假设我在C中定义了两个函数:

test_1() {}; test_2() {}; 

我想要一个宏(例如NUM_TEST)来引用测试号。 最好的方法是在代码中显示它:

 #define NUM_TEST 1 test_1() {}; test_2() {}; int main() { test_ ## NUM_TEST ## () } 

我很感激,如果有人会帮忙,找到一个解决方案,如何用宏来连接函数的名称。

编辑:

为了使它更清楚。 我想通过更改test_1()和test_2()之间的“宏NUM_TEST”更改调用函数。

是的我知道有更简单的方法可以做到这一点,但这只是更常见问题的一个例子:如何在C中连接宏而不添加新行或新的宏函数。

编辑2:

显然我现在已经足够清楚了。 假设我写了一个程序。 它有两种(或更多)运行类型。 我有一个叫做NUM_TEST的宏。 通过将提到的宏设置为1或2,想要在test_1()或test_2()之间选择运行类型

谢谢!

这是你在找什么?

 #include  #define TEST(NUM) test_ ## NUM () test_1() { printf ("Hello "); } test_2() { printf ("World!\n"); } int main (void) { TEST(1); TEST(2); // Prints "Hello World!\n" return 0; } 

而不是创建一个确定这一点的宏,最好只是将命令行参数传递给它,它代表测试编号。 像这样:

 #include  int main( int argc, char *argv[] ) { switch(argv[1]) { case "1" : Test_1(); break; case "2" : Test_2(); break; default : printf("Test ID not found"); } } 

但是,如果您只想查找名称的别名,则可以使用Test_1,Test_2等函数。然后只需要一个通用的TESTTORUN,无论您希望运行所选的测试。 在编译时,预处理器将其替换为您想要的函数名称:

 #define TESTTORUN Test_1 //Or Test_2 or whatever 

这将导致编译器用Test_1替换程序中的TESTTORUN。