在编译时创建函数列表

时间:2016-04-03 13:47:41

标签: c c-preprocessor

对于一个小的测试框架我试图在编译时创建一个函数列表。 我正在使用宏创建一个测试函数,并希望能够从main调用所有添加的testx。

#define ADD_TEST(X) my_test_##X

ADD_TEST(foo){
    ASSERT_EQ(1, 2);
}
ADD_TEST(bar){
    ...
}

int main (void){
    something_calling_all_my_tests();
    return 0;
} 

C ++中的完整示例是http://pastebin.com/C5mmcYDD

问候

1 个答案:

答案 0 :(得分:0)

使用属性((构造函数))我们可以在main之前运行该函数并注册每个测试函数。它不是编译时间,但到目前为止符合我的需求。

#define ADD_TEST(TEST_NAME) void test_##TEST_NAME (void);       \
  void  t_##TEST_NAME##_registerFunction (TestFunction test_##TEST_NAME)__attribute__ ((constructor)); \
  void  t_##TEST_NAME##_registerFunction (TestFunction test_##TEST_NAME){n++; printf("running %s\n", #TEST_NAME);} \
  void test_##TEST_NAME (void)