Declaring
Functions are not objects, but do have types. A function type is characterized by it's return type as well as the number and types of its parameters. The return type of a function cannot be an array type.
When you declare a function, you use the function declaration to specify the
name of the function and the return type. If the declarator includes a parameter
type list and a definition, the declaration of each parameter must include an
identifier, except parameter list which are void.
// Function with no parameters that returns an int.
int f(void);
// Function with no parameters that returns a pointer to an int.
int *fip();
// Two functions, each returning void, and taking two ints.
void g(int i, int j);
void h(int, int);
Declaring a function without any parameters (to imply void), like function
fip above is occasionally problematic. In C++ that function would instead
accept any number of arguments of any type. This is also a deprecated language
feature and could be removed in the future (however unlikely). It's better to
just write (void).
Defining
The function definition provides the actual implementation of the function.
int max(int a, int b)
{ return a > b ? a : b; }