Groovy hepcat grid was jivin' on Mon, 19 Sep 2005 15:10:13 +0530 in
comp.lang.c.
Re: Function with variable number of arguments's a cool scene! Dig it!
>> void vB(const char *fmt, va_list arg)
>> {
>> while(whatever)
>> {
>> somevar = va_arg(arg, some_type);
>> use somevar;
>> }
>> }
>In this context,this is what the standard has to say :
>If access to the varying arguments is desired, the called function shall
>declare an object (referred to as ap in this subclause)having type
>va_list. The object ap may be passed as an argument to another function;
>if that function invokes the va_arg macro with parameter ap, the value
>of ap in the calling function is indeterminate and shall be passed to
>the va_end macro prior to any further reference to ap.
That's exactly what I've done here. The B() function (below)
initialises a va_list (which I've called arg, not ap) then passes it
to the vB() function (above). This then processes the arguments by
using the va_arg macro.
I should probably point out (for the less clueful people reading
this) that vB() is incomplete, of course. It's mostly psuedocode. But
the use of va_arg is valid as long as some_type is a valid type name
and somevar an object of that type and the type is the same as the
coresponding passed argument (after promotion).
>Further ,It is permitted to create a pointer to a va_list and pass that
>pointer to another function, in which case the original function may
>make further use of the original list after the other function returns.
Right. But there's no need to do that here.
>> void B(const char *fmt, ...)
>> {
>> va_list arg;
>>
>> va_start(arg, fmt);
>> vB(fmt, arg);
>> va_end(arg);
>> }
>>
>
>So is the above code valid.I am not sure I completely understand what
>the standard says.
Yes (notwithstanding the psuedocode in the vB() function). See
explanation above.
--
Dig the even newer still, yet more improved, sig!
http://alphalink.com.au/~phaywood/
"Ain't I'm a dog?" - Ronny Self, Ain't I'm a Dog, written by G. Sherry & W. Walker.
I know it's not "technically correct" English; but since when was rock & roll "technically correct"?