没有第一个参数的可变参数 - va_start 属于什么?

Tom*_*ica 8 c variadic-functions

我想创建varargs一次释放多个指针的函数,主要是为了清理代码。所以我有:

void free_all( ... ) {
    va_list arguments;
    /* Initializing arguments to store all values after last arg */
    // but there are no args!
    va_start ( arguments, ????? );
    /* we expect the caller to send last argument as NULL **/
    void* pointer = va_arg ( arguments, void* );
    while( (pointer = va_arg ( arguments, void* ))!=NULL ) {
        free(pointer);
    }
    va_end ( arguments );                  // Cleans up the list
}
Run Code Online (Sandbox Code Playgroud)

那么该放va_start ( arguments, ????? )什么?

Iha*_*imi 6

这根本不可能。你必须有一个非可变参数,总是。在你的情况下

void free_all(void *first, ...);
Run Code Online (Sandbox Code Playgroud)

可以工作。

  • @TomášZato,这是国际海事组织标准的监督。这个额外的参数是堆栈框架中的一个钩子。理论上,没有它也可以完成。 (2认同)