In mathematics, a function takes one or more values and calculates, or
returns, another value. In C, some functions return values and
others do not; whether a function you write does or does not will depend
on what you want the function to do. For example, a function that
calculates a value should probably return that value, while a function
that merely prints something out may not need to.
The add_two_numbers function above did not return a value. We
will now examine a function that does.
Here is an example of calling a function that returns a value:
bill = calculate_bill (data1, data2, data3);
When this statement is executed, control is passed to the function
calculate_bill, that function executes, and then it returns control
and some value to the original statement. The value returned is assigned
to bill, and the program continues.
In C, returning a value from a function is a simple matter. Consider the
function calculate_bill as it might be written in a program that
contains the statement above:
int calculate_bill (int a, int b, int c)
total = a + b + c;
As soon as the return statement is met, calculate_bill
stops executing and returns the value total.
A function that returns a value must have a return statement.
Forgetting it can ruin a program. For instance if calculate_bill
had read as follows, then the variable bill would have had
no meaningful value assigned to it, and you might have received a
warning from the compiler as well. (The word void below
indicates that the function does not return a value. In ANSI C, you must
place it before the name of any such function.)
void calculate_bill (int a, int b, int c)
total = a + b + c;
On the other hand, you do not need to actually use a value when a
function returns one. For example, the C input/output functions
printf and scanf return values, but the values are rarely
used. See output, for more information on
If we use the first version of the calculate_bill function (the
one that contains the line return total;), the value of the
function can simply be discarded. (Of course, the resulting program is
not very useful, since it never displays a value to the user!)
calculate_bill (1, 2, 3);