假设我有一个接受可变数量参数的函数:我想从其他地方调用这个函数,构建参数列表,但事先不知道我需要多少个参数。

抱歉,没有很好地解释,希望这段代码能让我的问题更清楚:

void foo(int n, ...) {
    va_list vl;
    va_start(vl,n);

    for (int i = 0; i<n; i++) {
      // Do something to each passed variable
    }
}

正在从这个函数调用该函数:
void bar(int howManyParams) {

  // Here I want to call foo() with howManyParams parameters
  // (values are irrelevant for the question)
  //
  // I.e. for howManyParams = 1, we should call foo(0)
  //      for howManyParams = 2, we should call foo(0,0)
  //      for howManyParams = 3, we should call foo(0,0,0)
  // etc.
  //

}

最佳答案

实际上在运行时构建一个可变长度的参数列表——我很确定你正在尝试这样做——非常棘手。在标准 C 中根本没有办法做到这一点,但是您可以尝试各种技巧。

也许最好的是 http://sourceware.org/libffi/ 的“外部函数接口(interface)库”。

另请参阅 C FAQ 列表中的问题 15.13:http://c-faq.com/varargs/invvarargs.html

另请参阅之前的 Stackoverflow 问题:
C late binding with unknown arguments
How to call functions by their pointers passing multiple arguments in C?

关于c++ - 使用未知数量的参数调用可变参数函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35093317/

10-14 11:32
查看更多