gpt4 book ai didi

c - 嵌套包装函数

转载 作者:行者123 更新时间:2023-11-30 19:52:28 27 4
gpt4 key购买 nike

假设我有这些功能:

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 接受一个指向没有参数的函数的指针。

有没有一种巧妙的方法可以允许以嵌套方式调用没有、一个或多个这样的包装器?

最佳答案

类似函数的宏可以相当干净地使用来回避参数问题:

#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);;

关于c - 嵌套包装函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56695205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com