It's not a function. It's a "preprocessor instruction". They can be function-esque.* The preprocessor goes through the code before it is compiled. What it does is literally replace an instance of a #define label with it's output. So in your example, anywhere the label "AGE" occurs in the code, the preprocessor replaces it with the number 20. This is very handy if you want to say, use a file in a number of different places:
Code:
#define INPUT_FILE "thatdata.txt"
Now, if you want to change the file used, rather than search and replace the name everywhere, you use the define label in it's place, and all you have to do is change that one #define.
There are also defines that work like functions, called macros. So for example:
Code:
#define MAX(a, b) (a)>(b) ? a : b
This uses the ternary operator -- of the form condition ? true : false -- to output the higher value. So if you use this macro somewhere:
Code:
int x = 5, y = 6, z = MAX(x,y);
The preprocessor will replace that with 6.
* actually you can write more or less literal C functions into a define but they have some logical limitations.