#undef is a preprocessor directive. It undoes a #define.

That's it. Let's say that you said #define x y-- to borrow the example from Ubergeek's writeup under #define-- but sometime later in the program, things are different and you don't want it to mean that anymore. Or, more likely, you just want to make sure that some header file didn't #define x as something wierd. So, you say

#undef x
And the preprocessor forgets it ever heard of x.