HP C A.06.05 Reference Manual
Data Types and Declarations
Function Definitions
Chapter 3 71
3. Visibility outside defining translation unit. A function can be local to the translation
unit in which it is defined (if the storage class specifier is static). Alternatively, a
function can be visible to other translation units (if no storage class is specified, or if the
storage class is extern).
4. Body of the function. You supply the body that executes when the function is called in a
single compound statement following the optional
declaration-list.
Do not confuse definition with declaration, especially in the case of functions. Function
definition implies that the above four pieces of information are supplied. Function declaration
implies that the function is defined elsewhere.
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 compatibility 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 adjusted to pointer to type T, and functions are
adjusted 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.