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 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.