Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #12792

Re: variadic function

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>

Show all headers | View raw


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


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