comp.lang.ada
 help / color / mirror / Atom feed
From: "Frank J. Lhota" <NOSPAM.lhota.adarose@verizon.net>
Subject: Re: GNAT parameter passing, C-style?
Date: Wed, 31 Dec 2003 14:45:20 GMT
Date: 2003-12-31T14:45:20+00:00	[thread overview]
Message-ID: <4iBIb.8173$qS3.498@nwrdny03.gnilink.net> (raw)
In-Reply-To: lnekul8ewd.fsf@nuthaus.mib.org

"Keith Thompson" <kst-u@mib.org> wrote in message
news:lnekul8ewd.fsf@nuthaus.mib.org...
> "Frank J. Lhota" <NOSPAM.FrankLho@rcn.com> writes:
> > I don't believe it was stated explicitly, but the standard C calling
> > convention (arguments pushed on the stack in reverse order, and popped
off
> > by the callee) is implied by the requirements for variable argument
> > functions.
> [...]
>
> No, it isn't.  In standard C, functions with variable argument lists
> have a special syntax ("..."), and don't have to use the same calling
> conventions as other functions.  In the body of such a function, it
> accesses its arguments using special macros defined in the header
> <stdarg.h>; these macros can do whatever compile-specific magic is
> necessary.

In vanilla (i.e. original K&R) C, there are no argument lists in function
declarations. For that matter, vanilla C does NOT even require functions
declarations. If an undeclared function is called in vanilla C, the
unconverted argument list is assumed to be OK, the calling convention is
assumed to be C, and it is assumed that the function returns an int.

ANSI C depreciates this loose approach to functions. ANSI C strongly
encourages the full declaration of all functions used, including argument
lists. For compatability, however, ANSI C accepts function declarations with
no argument lists (e.g. "double sin();"), as well as the calling of
undeclared functions. Since there is no requirement that the user will
declare a function's argument list (or the function for that matter), a C
compiler may not be able to tell whether a function accepts a variable
argument list or not. For that reason, C compilers have to assume the C
calling convention, unless the user indicates via declaration or command
line options.

Every C compiler that I have worked with uses the C calling convention by
default when compiling C (as opposed to C++) code. If you know of a C
compiler that works differently, please post the details. I'm not saying
this because out of fondness for the C calling convention. Although this
convention is required to handle variable argument lists, it is less
efficient for the vast majority of cases where the function has a fixed
parameter list.

Fortunately, C++ has resolved this problem by making a clean break from
vanilla C. They do require that functions must be declared, including its
parameter list, for it to be used. The compiler can always determine if a
function has a variable argument list, and hence can (and does) reserve the
C calling conventions for only those functions that require it.







  reply	other threads:[~2003-12-31 14:45 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-26 10:37 GNAT parameter passing, C-style? Luke A. Guest
2003-12-26 14:20 ` Marin David Condic
2003-12-26 14:51   ` Hyman Rosen
2003-12-26 15:07     ` Marin David Condic
2003-12-26 15:39       ` Luke A. Guest
2003-12-26 17:03         ` Hyman Rosen
2003-12-26 17:08           ` Luke A. Guest
2003-12-26 17:27             ` Luke A. Guest
2003-12-26 18:21               ` Frank J. Lhota
2003-12-26 19:06                 ` Frank J. Lhota
2003-12-31 10:23                 ` Keith Thompson
2003-12-31 14:45                   ` Frank J. Lhota [this message]
2003-12-31 15:05                     ` Hyman Rosen
2003-12-31 16:30                       ` Frank J. Lhota
2003-12-31 17:24                         ` Hyman Rosen
2003-12-31 19:05                           ` Frank J. Lhota
2003-12-31 19:38                             ` Hyman Rosen
2003-12-31 20:47                               ` Frank J. Lhota
2003-12-31 21:35                                 ` Hyman Rosen
2004-01-01  2:50                                   ` Frank J. Lhota
2004-01-01  5:20                                     ` Luke A. Guest
2004-01-01 16:06                                       ` Hyman Rosen
2004-01-01 16:32                                         ` Frank J. Lhota
2004-01-01 16:43                                           ` Hyman Rosen
2004-01-02  0:24                                             ` Frank J. Lhota
2004-01-02  4:09                                               ` Hyman Rosen
2004-01-02 13:29                                                 ` Frank J. Lhota
2004-01-01  5:17                                   ` Luke A. Guest
2004-01-01  5:09                                 ` Luke A. Guest
2004-01-02  1:17                                   ` tmoran
2004-01-01 17:18                                 ` Jano
2004-01-02  0:25                                   ` Frank J. Lhota
2004-01-07  6:37                         ` Dave Thompson
2004-01-01  3:38                       ` Marin David Condic
2004-01-01  5:28                         ` Luke A. Guest
2004-01-01 14:17                           ` Marin David Condic
2004-01-01 16:20                             ` Jeff C,
2004-01-02 13:47                               ` Marin David Condic
2004-01-05 21:06                     ` Keith Thompson
2004-01-06  3:42                       ` Robert I. Eachus
2004-01-06 20:54                         ` Keith Thompson
2004-01-06 23:45                           ` Robert I. Eachus
2004-01-06 13:46                       ` Frank J. Lhota
2003-12-27 14:22             ` Marin David Condic
2003-12-26 17:10         ` Martin Krischik
2003-12-26 19:04           ` Frank J. Lhota
2003-12-26 18:01   ` Georg Bauhaus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox