Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| From | Keith Thompson <kst-u@mib.org> |
|---|---|
| Newsgroups | comp.lang.c |
| Subject | Re: variadic function |
| Date | 2011-11-05 16:35 -0700 |
| Organization | None to speak of |
| Message-ID | <lnipmydtxq.fsf@nuthaus.mib.org> (permalink) |
| References | <j94dhl$6ua$1@speranza.aioe.org> <j94eoq$54f$1@dont-email.me> |
James Kuyper <jameskuyper@verizon.net> writes:
> On 11/05/2011 06:32 PM, Quentin Pope wrote:
>> Consider the variadic function with the following prototype:
>> int foo(int num,...);
>> Here 'num' specifies the number of arguments, and assume that all the
>> arguments that should be passed to this function are of type int.
>> (My question has nothing to do with the definition of the function
>> foo, so don't bother about it.)
>>
>> If I call the function as:
>> foo(2,3,4,5,6,7,8);/*More arguments than expected*/
>>
>> Here I call foo with too many arguments than expected by its
>> definition.
>>
>> Assuming that the prototype is visible in the scope of the function
>> call and the definition of function foo itself does NOT produce any
>> UB, please tell me if this function call produces UB or not.
>>
>> I am not able to find any explicit clause from C99 which deals with
>> this behavior.
>>
>> Though I find that:
>>
>> 7.19.6.1 The fprintf function
>> The fprintf function writes output to the stream pointed to by stream,
>> under control of the string pointed to by format that specifies how
>> subsequent arguments are converted for output. If there are
>> insufficient arguments for the format, the behavior is undefined. If
>> the format is exhausted while arguments remain, the excess arguments
>> are evaluated (as always) but are otherwise ignored.
>>
>> This is highly specific to fprintf. I wonder if it applies to all
>> variadic functions.
>
> Each variadic function must have some mechanism for determining how many
> arguments it's received; there's a wide variety to choose from. However,
> once that mechanism has been used, the same principles apply: if the
> actual number of arguments is larger than the function expects, it won't
> know that they're accessible, and so it shouldn't try to access them.
> Nothing will go bad for any reason other than the direct and indirect
> consequences of the fact that it didn't try to access them.
Note that the standard *could* have stated that the behavior of
invoking va_end() before consuming all the actual arguments with
va_arg() is undefined. There's even an argument to be made that
since it doesn't explicitly define the behavior, the behavior
is therefore undefined. But since it does define the behavior of
va_end(), and that definition makes no reference to whether va_arg()
has been used or not, I'd say that the behavior is well defined.
[...]
--
Keith Thompson (The_Other_Keith) kst-u@mib.org <http://www.ghoti.net/~kst>
"We must do something. This is something. Therefore, we must do this."
-- Antony Jay and Jonathan Lynn, "Yes Minister"
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
variadic function Quentin Pope <qp19433@hotmail.NOSPAM.com> - 2011-11-05 22:32 +0000
Re: variadic function Keith Thompson <kst-u@mib.org> - 2011-11-05 15:50 -0700
Re: variadic function Quentin Pope <qp19433@hotmail.NOSPAM.com> - 2011-11-07 17:41 +0000
Re: variadic function James Kuyper <jameskuyper@verizon.net> - 2011-11-05 18:53 -0400
Re: variadic function Keith Thompson <kst-u@mib.org> - 2011-11-05 16:35 -0700
Re: variadic function Kaz Kylheku <kaz@kylheku.com> - 2011-11-06 01:36 +0000
Re: variadic function Kaz Kylheku <kaz@kylheku.com> - 2011-11-06 01:31 +0000
Re: variadic function Barry Schwarz <schwarzb@dqel.com> - 2011-11-06 09:45 -0800
Re: variadic function Keith Thompson <kst-u@mib.org> - 2011-11-06 11:38 -0800
Re: variadic function Tim Rentsch <txr@alumni.caltech.edu> - 2012-01-24 23:24 -0800
Re: variadic function Keith Thompson <kst-u@mib.org> - 2012-01-25 02:54 -0800
Re: variadic function Tim Rentsch <txr@alumni.caltech.edu> - 2012-01-31 18:22 -0800
Re: variadic function Keith Thompson <kst-u@mib.org> - 2012-01-31 21:50 -0800
Re: variadic function James Kuyper <jameskuyper@verizon.net> - 2012-02-01 07:55 -0500
Re: variadic function Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-02-01 08:06 -0500
Re: variadic function Keith Thompson <kst-u@mib.org> - 2012-02-01 11:42 -0800
Re: variadic function Willem <willem@toad.stack.nl> - 2012-02-01 16:15 +0000
Re: variadic function Keith Thompson <kst-u@mib.org> - 2012-02-01 11:41 -0800
Re: variadic function Shao Miller <sha0.miller@gmail.com> - 2012-02-01 13:41 -0500
Re: variadic function blp@cs.stanford.edu (Ben Pfaff) - 2012-02-01 10:45 -0800
Re: variadic function Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-08 10:30 -0800
Re: variadic function Keith Thompson <kst-u@mib.org> - 2012-03-08 13:57 -0800
Re: variadic function Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-09 13:10 -0800
Re: variadic function jgk@panix.com (Joe keane) - 2012-03-11 07:56 +0000
Re: variadic function Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-11 13:01 -0700
Re: variadic function jgk@panix.com (Joe keane) - 2012-03-12 19:04 +0000
Re: variadic function Tim Rentsch <txr@alumni.caltech.edu> - 2012-03-13 15:05 -0700
csiph-web