title: Undefine a preprocesser directive that is used in another preprocessor directive
body: <p>This is not my exact issue, but an example is as follows</p>
  
  <pre><code>// Method 1
  
  #define Function(argument)  (StupidLongArray[argument] + OtherStupidLongArrayName[argument] * WhyAreMyNamesSoLong[argument])
  </code></pre>
  
  <p>or, prefered</p>
  
  <pre><code>// Method 2
  
  #define _SLA StupidLongArray
  #define _OSLAN OtherStupidLongArrayName
  #define _WAMNSL WhyAreMyNamesSoLong
  
  #define Function(argument) (_SLA[argument] + _OSLAN[argument] * _WAMNSL[argument])
  
  #undef _SLA 
  ...
  ...
  </code></pre>
  
  <p>My understanding of these preprocessor directions implies that once Function has been defined, I can get rid of _SLA and friends. This is not the case.</p>
  
  <p>How come? Is their a way around it? </p>