将一个函数作为参数传递给其他函数

时间:2018-10-13 00:43:47

标签: c function arguments

我一直在阅读关于这个主题的文章。我已经阅读了很多可能的解决方案,所以请不要将我的问题标记为重复,只需要解决该问题即可。

我有一个函数,可以计算某些代码的执行时间。这段代码将作为参数发送(将是一个函数)。

这是计算时间的函数:

double executionTime( /* HERE I WANNA PASS THE FUNCTION TO CALCULATE EXECTIME*/ )
{
    LARGE_INTEGER frequency;
    LARGE_INTEGER start;
    LARGE_INTEGER end;
    double interval;

    QueryPerformanceFrequency(&frequency);
    QueryPerformanceCounter(&start);

    // HERE GOES CODE TO PROCCESS

    QueryPerformanceCounter(&end);
    interval = (double) (end.QuadPart - start.QuadPart) / frequency.QuadPart;

    return (interval);
}

我已经尝试过这种方法(以及其他方法,但这是最可见的):

double executionTime( void (*f)() )
{
    LARGE_INTEGER frequency;
    LARGE_INTEGER start;
    LARGE_INTEGER end;
    double interval;

    QueryPerformanceFrequency(&frequency);
    QueryPerformanceCounter(&start);

    // Function to proccess
    f();

    QueryPerformanceCounter(&end);
    interval = (double) (end.QuadPart - start.QuadPart) / frequency.QuadPart;

    return (interval);
}

我不知道处理函数的参数是否重要。在某些网站上说是,在其他网站上说不。我要处理的函数的声明是:

int readFileAndInsertRegs(char *nombreFichero, PERSONA *tablaHash[], int tam, int tipoInsertado, int tipoPruebaColision) 

我已经像这样调用函数executionTime

executionTime( readFileAndInsertRegs("./files/listaActores.csv", &tablaHash, TAM_E1, NORMAL, LINEAL) );

有人可以帮助我解决这个特定问题吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

通常的方法是将函数参数传递给executionTime并使用它们调用函数,即

double executionTime( void (*f)(), char *arg1, PERSONE arg2[], ... )
{
    // do preamble

     f(arg1, arg2, .....);

    // finish
}

...

executionTime( &readFileAndInsertRegs, "./files/listaActores.csv", &tablaHash, TAM_E1, NORMAL, LINEAL));

这是一个有效的示例:

#include <stdio.h>

void process1(void (*f)(), int farg) {
  f(farg);
}

void f1(int arg) {
  printf("f1: %d\n", arg);
}

int main() {
  process1(&f1, 10);
  return 0;
}

,并且在'c'中,您可以声明函数的所有参数,尽管可以,但这样做是个好主意。编译器可以再进行一次检查

    void process1(void (*f)(int), int farg) {