传递带参数的函数作为参数

Dea*_*Eli 3 c function-pointers

我想将一个带参数的函数作为参数传递给其他函数,但我不知道(或者如果)我能做到这一点.

我想做的是:

#include <stdio.h>

void getInput(char* request, int (*func)());

int main()
{
    double input;
    getInput("Input: ", scanf("%lf", &input));
}

void getInput(char* request, int (*func)())
{
    // do stuff
    func()
    // do more stuff
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用.我认为当我试图将它作为参数传递时,scanf会被执行.如何让它在getInput中运行?

unw*_*ind 5

你不能在C中做到这一点,语言不支持这样的结构.

您通常可以再次使用变量参数函数来解决这种确切类型的问题:

void getInput(const char *request, const char *fmt, ...)
{
  va_list args;
  printf("%s: ", request);
  fflush(stdout);
  va_start(fmt, args);
  vscanf(fmt, args);
  va_end(args);
}
Run Code Online (Sandbox Code Playgroud)

用法是这样的:

int main(void)
{
  double input;
  getInput("Input", "%lf", &input);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当然,您可能希望添加适当的返回值处理,否则无法知道嵌入是否vscanf()成功,因此变量可以使用.