This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: second parameter of `va_start' not last named argument


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]