假设我具有以下功能:
void DUT(void){
/* Something under test*/
}
void loop_wrapper(void (*func)()){
for(int i = 0; i<5000; i++)
func();
}
void time_wrapper(void (*func)()){
clock_t start, end;
double cpu_time_used;
start = clock();
func();
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC * 1000;
printf("Execution time %f ms\n", cpu_time_used);
}
int main(void){
time_wrapper(DUT);
}
在代码中,不可能同时用两个包装器包装DUT。这样的呼叫可能看起来像time_wrapper(loop_wrapper(DUT));
。这将是无效的,因为time_wrapper会使用没有参数的函数指针。
是否有一种整齐的方法允许以嵌套方式调用一个,一个或多个此类包装器?
答案 0 :(得分:-2)
可以很干净地使用类似于函数的宏来避免参数问题:
#define loop_wrapper(func) \
for(int i = 0; i<5000; i++){func;}
#define time_wrapper(func) \
clock_t start, end; \
double cpu_time_used; \
start = clock(); \
func; \
end = clock(); \
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC * 1000; \
printf("Execution time %f ms\n", cpu_time_used);
int main(void){
time_wrapper(loop_wrapper((DUT()));
}
预处理器输出将压缩为一行。应该没有问题,因为人类不需要读取此输出。
clock_t start, end; double cpu_time_used; start = clock(); for(int i = 0; i<5000; i++){DUT();}; end = clock(); cpu_time_used = ((double) (end - start)) / ((clock_t) 1000000) * 1000; printf("Execution time %f ms\n", cpu_time_used);;