C 中的可变函数指针

问题描述 投票:0回答:1

我想实现一个函数,它接受一个函数及其参数,然后调用它。 我进行了很多搜索,但无法用可变参数函数来实现它。 我想要一种在调用单元测试函数后记录 stdio 的干净方法。

即使您想建议另一种录制stdio的方法,请帮我解决原来的问题。

类似这样的东西,但是有效。

void
foo(void (*function)(...), ...) {
  va_list args;
  va_start(args, function);
  // This line is just to explain what i want
  function(args);
  va_end(args);
}


void
bar(int a, char *b) {
  printf("a = %d, b = %s\n", a, b);
}


int
main() {
    foo(bar, 2, "hello");
  return 0;
}

上面的代码......................

c function pointers function-pointers variadic
1个回答
0
投票

它并不像你想象的那样工作。您需要将

va_list
传递给函数。

void foo(void (*function)(va_list), ...) {
  va_list args;
  va_start(args, function);
  function(args);
  va_end(args);
}


void bar(va_list list) 
{
    int a = va_arg(list, int);
    char *b = va_arg(list, char *);
    printf("a = %d, b = %s\n", a, b);
}


int main(void) {
    foo(bar, 2, "hello");
}

https://godbolt.org/z/db8nKPbrq

© www.soinside.com 2019 - 2024. All rights reserved.