title: Emacs C-mode auto-indent fails after preprocessor macro
body: <p>Emacs 24.2 for Windows.</p>
  
  <pre><code>case TYPE_LONG: 
   {                           &lt;------- 65383 
     traceCodePath(20);        
     tempLongVal = iterator_long(it);  
     tempLongVal = 10; 
     if (isBigEndian()) 
     { 
       swap_endian64(&amp;tempLongValCon, &amp;tempLongVal); 
       traceCodePath(25);      &lt;------- 65601 
       if (i &gt; 0) 
         {     &lt;------ get weird from here /* ((substatement-open 65601)) */ 
   }           &lt;------ this line aligns with the { below "case"  /* ((block-close 65383)) */ 
   }           &lt;------ the code afterward all align with { below "case" /* ((block-close 65383)) */
  </code></pre>
  
  <p>c-mode indentation worked well since the beginning， until I added some Preprocessor macro， #ifdef, #else, #end, after that, from some point in code, all afterward indentations get messy. 
  Every line's syntatic symbol is right, but the anchor positions are all wrong, seems they can not recognize the { at their same level, but anchor to some { before them at a upper level.</p>
  
  <p>What's more weird, even I remove those preprocessor macro's again, indentation won't recover again.<br>
  What's more more weird, sometimes later, it recovered for no reason. I don't know what operations triggered this, but most possible I think is "save" "revert-buffer" etc.</p>
  
  <p>Hope someone can figure the reason out, thanks in advance.</p>