title: Preventing incorrect macro expansion in gcc
body: <p>Is there any way to prevent gcc from expanding a macro in this: </p>
  
  <pre><code>#define putc(a) fputc(a)
  
  ...
  
  void _putc(char ch) {}
  struct foo { void *(putc)(char ch); }
  struct foo f = {_putc;}
  
  (&amp;f)-&gt;putc('X'); // this is an error because it gets expanded into fputc, which is very inappropriate. 
  </code></pre>
  
  <p>I don't want to use <code>#undef putc</code> because it messes up other things. </p>