我有一个测试文件,测试定义为
static int test1(){
/*some tests here*/
return 0;
}
static int test2(){
/*some tests here*/
return 0;
}
/*...etc*/`
我想知道是否有办法在循环中调用所有测试,而不是为每个测试编写调用。 (我需要在每次测试之前和之后调用一些函数,并且通过> 20次测试,这可能会非常烦人。我也很好奇这样做了一段时间。)
我在想类似的事情:
int main(){
int (*test)() = NULL;
for(i = 1; i <= numtests; i++){
/*stuff before test*/
(*test)();
/*stuff after test*/
}
return 0;
}
但我不确定如何继续使用&#34; i&#34;设置测试指针。
答案 0 :(得分:1)
在linux上
将函数放在一个单独的共享库(.so)中。然后使用dlopen打开它并使用dlsym来获取一个名称为
的函数指针在Windows上
将函数放在一个单独的dll中(基本上是相同的)。然后使用LoadLibrary打开它,并使用GetProcAddress获取指向函数的指针
你想要做更多的打字,但它会让你做你想做的事情
答案 1 :(得分:0)
你可以做的是定义一个包含所有函数的函数指针数组,然后循环遍历数组的所有元素。
int (*array[])(void) = {test1, test2, test3};
答案 2 :(得分:0)
您可以使用自包含技巧来获取函数指针列表:
#ifndef LIST_TESTS
#define TEST(name, ...) static int name() __VA_ARGS__
/* all includes go here */
#endif // ifndef LIST_TESTS
TEST(test1, {
/* some tests here */
return 0;
})
TEST(test2, {
/* some tests here */
return 0;
})
#undef TEST
#ifndef LIST_TESTS
int main(void) {
int (*tests[])() = {
#define LIST_TESTS
#define TEST(name, ...) name,
#include __FILE__
};
int num_tests = sizeof(tests) / sizeof(tests[0]);
int i;
for (i = 0; i < num_tests; ++i) {
/* stuff before test */
(tests[i])();
/* stuff after test */
}
return 0;
}
#endif // ifndef LIST_TESTS