This pair of terms is used to describe the participants in a function call:
If routine A calls routine B then routine A is the caller and routine B is the callee. i.e. the caller is the routine which is calling the callee.
If this is obvious then you can leave now (grin).

Comments which I received when this writeup ended right here have made it clear that it isn't obvious to everyone.


Consider the following set of routines (in an imaginary programming language):

 1     routine alpha(n)
 2     print "n is ",n
 3     return
 4     end
 5
 6     routine beta()
 7     call alpha(12)
 8     return
 9     end
10
11     routine gamma()
12     call beta()
13     return
14     end
When gamma calls beta on line 12, gamma is the caller and beta is the callee. Later, when beta calls alpha on line 7, beta is the caller and alpha is the callee.

One key point is that for each call between routines, the routine that initiates the call is the caller and the routine that is being called is is the callee. i.e. beta is the callee when it is called by gamma but becomes the caller when it calls alpha.

If you want to see why these terms are worth defining, read about linkage conventions and ask yourself how you'd describe the concept of linkage conventions without these two terms or two other terms with equivalent meaning.

These terms aren't particularily useful outside of the realm of linkage conventions (or calling conventions).


argument vs parameter

There's another set of related terminology which is probably worth explaining here and that's the difference between a parameter and an argument. When a routine calls another routine, it may pass something to the other routine. From the perspective of the caller the thing which is passed is an argument. From the perspective of the routine that receives the call, i.e. the callee, the thing which is passed is a parameter. For example, in the above call on line 7, the argument 12 is passed by beta. Within alpha, the parameter n then gets an initial value of 12 (which is printed on line 2).

Unfortunately, the distinction between what an argument is and what a parameter is has faded over time. In fact, it has pretty much reached the point where most people aren't aware of the distinction between an argument and a parameter. The failure to maintain a clear distinction between these two terms often leads to confusion when two people are discussing some of the subtle points of parameter or argument passing. If the confusion becomes severe enough and it is in a context which matters then it can even lead to an argument about arguments and parameters (grin).