Previous: Old GNU Inlining, Up: Obsolete Definitions [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 type va_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 the argptr 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.