HP C/iX Reference Manual (31506-90011)
Chapter 3 53
Data Types and Declarations
Function Definitions
You can declare formal parameters as structures or unions. When the function is called,
the calling function's argument is copied to temporary locations within the called function.
All functions in C may be recursive. They may be directly recursive so the function calls
itself or they may be indirectly recursive so a function calls one or more functions which
then call the original function. Indirect recursion can extend through any number of
layers.
In function definitions that do not use prototypes, any parameters of type float are
actually passed as double, even though they are seen by the body of the function as floats.
When such a function is called with a float argument, the float is converted back to float on
entry into the function.
NOTE
In non-ANSI mode, the type of the parameter is silently changed to double, so
the reverse conversion does not take place.
In a prototype-style definition, such conversions do not take place, and the float is both
passed and accessed in the body as a float.
Char and short parameters to nonprototype-style function definitions are always
converted to type int. This conversion does not take place in prototype-style definitions.
In either case, arrays of type T are always converted to pointer to type T, and functions are
converted to pointers to functions.
Single dimensioned arrays declared as formal parameters need not have their size
specified. If the name of an integer array is x, the declaration is as follows:
int x[ ];
For multidimensional arrays, each dimension must be indicated by a pair of brackets. The
size of the first dimension may be left unspecified.
The storage class of formal parameters is implicitly 'function parameter.' A further storage
class of register is accepted.
Examples
The following example shows a function that returns the sum of an array of integers.
int total(data, n) /* function type, name, formal list */
int data[ ]; /* parameter declarations */
int n;
{
auto int sum = 0; /* local, initialized */
auto int i; /* loop variable */
for(i=0; i<n; i) /* range over all elements */
sum += data[i]; /* total the data array */
return sum; /* return the value */
}
This is an example of a function definition without prototypes.
int func1 (p1, p2) /* old-style function definition */