So, to start off, here's the code, with actual names switched for generic ones to limit confusion.

```
/* Get the list of Hotkey commands */
#define A_COMMANDS_MACRO(a, b, c, d) a = b ,
enum {
#include "commandsFile.def"
} ;
#undef  A_COMMANDS_MACRO

```

This is a snippet from some source code I have been looking over and considering forking as a way to familiarize myself with the intricacies of the **C** programming language. So, to my untrained eye, this appears to do nothing. To my brain, defining something and then immediately undefining it would seem to cancel each other out. 

Obviously, I realize that I'm wrong. But why am I wrong?