在C中使用宏的concat代码

时间:2015-03-12 21:45:25

标签: c c-preprocessor

这就是事情:

假设我在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()

之间选择运行类型

谢谢!

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。