这就是事情:
假设我在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()
之间选择运行类型谢谢!
答案 0 :(得分:4)
这是你要找的吗?
#include <stdio.h>
#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;
}
答案 1 :(得分:0)
不是创建一个确定这个的宏,而是将命令行参数传递给它代表测试编号。像这样:
#include <stdio.h>
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。