second parameter of `va_start' not last named argument

Antonio Coralles noche.suapie@reflex.at
Fri Mar 25 21:56:00 GMT 2005


Ian Lance Taylor wrote:

> Antonio Coralles <noche.suapie@reflex.at <mailto:>> writes:
>
>> is there a way to prevent this gcc warning?
>> in a code similar to
>>
>> void foo(const std::string& format, ...);
>>
>> i determine the neccessary number of arguments by counting the
>> occurences of "%s" in format,
>> similar to printf. therefore, there is no need for the caller to pass
>> the number of arguments as a second
>> argument.
>
> If you want help, you will need to post a complete test case.
> Specifically, how are you calling va_start?  When you call va_start,
> you must pass it the last named argument in the function.  Any other
> usage is invalid.
>
> Ian

Here is a test case:

the source looks like this:

void foo(const std::string& format, ...)
{
    unsigned num = string_count("%s", format); // counts how often "%s"
    occurs in format
    va_list p_arg;
    va_start(p_arg, num);
    for(; num > 0; --num)
    {
       const char* arg = va_arg(p_arg, const char*)
       // ... do something with the acquired string
    }
    // ...
}

as i said, the function works similar to printf, and in printf there's no
second parameter specifying the length of the argument list...

antonio



More information about the Gcc-help mailing list