在编译时创建函数列表

Create a list of function at compile time

对于一个小型测试框架,我试图在编译时创建一个函数列表。 我正在创建一个带有宏的测试函数,并希望能够从 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

问候

使用 attribute ((constructor)) 我们可以 运行 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)