【发布时间】:2015-05-20 21:22:01
【问题描述】:
我想创建一个函数来测量作为参数传递的任何函数的执行时间,无论传递的函数有多少参数。
#include<stdio.h>
#include<time.h>
typedef void (*FUNC_PTR)(int, int);
void print_range(int n1, int n2)
{
int i;
for(i=n1; i<n2; i++){
printf("%d\n", i);
}
}
void measureTime(FUNC_PTR ptr, int n1, int n2)
{
time_t start_time = clock();
ptr(n1, n2);
time_t end_time = clock();
printf("%f\n", (double)end_time - start_time);
}
main()
{
int n1 = 1, n2 = 1000;
FUNC_PTR ptr = print_range;
measureTime(ptr, n1, n2);
}
我让它适用于传递具有 2 个参数的 print_range 的特定情况。
有没有办法让measureTime 函数执行任何作为FUNC_PTR ptr 传递的函数,而不必将print_range n1 和n2 参数传递给measureTime 函数。
例如,作为ptr 传递的函数可以有任意数量的参数,measureTime 仍然可以工作。
void measureTime(FUNC_PTR ptr)
{
time_t start_time = clock();
ptr;
time_t end_time = clock();
printf("%f\n", (double)end_time - start_time);
}
如果上面可以工作,那么 main 会是什么样子?
【问题讨论】:
-
没有办法传递“任何函数”,编译器需要非常详细地知道如何生成函数调用。有variadic functions 采用可变数量的参数,但我认为这不是你在说的。
-
您可以查看closures/blocks in C
-
@John 考虑接受其中一个答案。
标签: c function-pointers