Передача функции в качестве аргумента другой функции

Я читал об этой теме. Я прочитал много возможных решений, поэтому, пожалуйста, не помещайте мой вопрос как дублированный, нужно только решить проблему.

У меня есть функция, которая вычисляет время выполнения некоторого кода. Этот код будет отправлен как аргумент (будет функцией).

Это функция, которая вычисляет время:

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

Может ли кто-нибудь помочь мне с этой конкретной проблемой?

Спасибо.

обычно способ сделать это – передать аргументы функции executeTime и вызвать функцию с ними, т. е.

 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  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) {