Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > Re: va_arg() question

Reply
Thread Tools

Re: va_arg() question

 
 
Eric Sosman
Guest
Posts: n/a
 
      08-07-2003
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
>
> Hello all,
>
> I have a quick question regarding the use of va_arg() with multiple
> parameter definitions. If the parameters are of different types, how
> do I know what type it is when using va_arg() ????
>
> For example, if I was to write a function similar to the good old
> printf() which takes multiple parameters of different types (eg. int,
> char*, etc) how do I know whether the parameter I'm processing is an
> int or a char* ???


You must figure out the type of the argument before
using va_arg() to retrieve its value. printf() can do this
by inspecting the format string; for example,

printf ("%s = %d (%.2f%%)\n",

implies that the second through fourth arguments must be a
`char*', an `int', and a `double', respectively.

Note that the arguments corresponding to `...' are subject
to promotion. That is, if you pass a `float' value it will be
promoted to `double' and you must retrieve it as such. There
are a few unfortunate situations where the promotion rules are
implementation-defined -- for example, `unsigned short' might
promote to `int' or to `unsigned int' -- and in such cases you
can't write 100% portable code.

--
(E-Mail Removed)
 
Reply With Quote
 
 
 
 
Kevin Easton
Guest
Posts: n/a
 
      08-08-2003
Eric Sosman <(E-Mail Removed)> wrote:
> (E-Mail Removed) wrote:
>>
>> Hello all,
>>
>> I have a quick question regarding the use of va_arg() with multiple
>> parameter definitions. If the parameters are of different types, how
>> do I know what type it is when using va_arg() ????
>>

[...]
> Note that the arguments corresponding to `...' are subject
> to promotion. That is, if you pass a `float' value it will be
> promoted to `double' and you must retrieve it as such. There
> are a few unfortunate situations where the promotion rules are
> implementation-defined -- for example, `unsigned short' might
> promote to `int' or to `unsigned int' -- and in such cases you
> can't write 100% portable code.


Sure you can - just specify that your variadic function takes an int or
unsigned int, and not one of the ambiguously-promoted types. Then it's
up to the caller to ensure that the correct type is passed, probably
with a cast.

- Kevin.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
question row filter (more of sql query question) =?Utf-8?B?YW5kcmV3MDA3?= ASP .Net 2 10-06-2005 01:07 PM
Quick Question - Newby Question =?Utf-8?B?UnlhbiBTbWl0aA==?= ASP .Net 4 02-16-2005 11:59 AM
Question on Transcender Question :-) eddiec MCSE 6 05-20-2004 06:59 AM
Question re: features of the 831 router (also a 924 question) Wayne Cisco 0 03-02-2004 07:57 PM
Syntax Question - Novice Question sean ASP .Net 1 10-20-2003 12:18 PM



Advertisments