Previous: Older GNU C Inlining, Up: Obsolete Function Features [Contents][Index]
The syntax of C traditionally allows omitting the data type in a
function declaration if it specifies a storage class or a qualifier.
Then the type defaults to int
. For example:
static foo (double x);
defaults the return type to int
. This is bad practice; if you
see it, fix it.
An old-style (or “K&R”) function definition is the way function definitions were written in the 1980s. It looks like this:
rettype function (parmnames) parm_declarations { body }
In parmnames, only the parameter names are listed, separated by
commas. Then parm_declarations declares their data types; these
declarations look just like variable declarations. If a parameter is
listed in parmnames but has no declaration, it is implicitly
declared int
.
There is no reason to write a definition this way nowadays, but they can still be seen in older GNU programs.
An old-style variadic function definition looks like this:
#include <varargs.h> int add_multiple_values (va_alist) va_dcl { int argcount; int counter, total = 0; /* Declare a variable of typeva_list
. */ va_list argptr; /* Initialize that variable. */ va_start (argptr); /* Get the first argument (fixed). */ argcount = va_arg (int); for (counter = 0; counter < argcount; counter++) { /* Get the next additional argument. */ total += va_arg (argptr, int); } /* End use of theargptr
variable. */ va_end (argptr); return total; }
Note that the old-style variadic function definition has no fixed
parameter variables; all arguments must be obtained with
va_arg
.