Another Very Interesting Example:
we can use this trick to decide whether or we want to trace f by whether or not to define TRACE.
#ifdef TRACE
#define ENTER(f) printf("Entering %s\\n", f);
#define EXIT(f) printf("Exiting %s\\n", f);
#else
// define ENTER and EXIT with empty replacement text
#define ENTER(f)
#define EXIT(f)
#endif