title: C "#define" function name generation
body: <p>I have <code>concrete_impl.h</code> (as is):</p>
  
  <pre><code>#ifdef TUPLE_ITERATOR_WITH_INDEX
      #define TUPLE_ITERATOR TUPLE_ITERATOR_NO_INDEX
      #define iterate_tuple_fname iterate_tuple_id
  #else
      #define TUPLE_ITERATOR TUPLE_ITERATOR_INDEX
      #define iterate_tuple_fname iterate_tuple
  #endif
  
  #undef  iterate_tuple_fname_back
  #define iterate_tuple_fname_back iterate_tuple_fname##_back
  
  static void iterate_tuple_fname()         // ok 
  {
  }
  
  static void iterate_tuple_fname_back()   // redefinition error
  {
  }
  </code></pre>
  
  <p>And <code>concrete.h</code> (as is):</p>
  
  <pre><code>#ifndef CONCRETE_H
  #define CONCRETE_H
  
  #define TUPLE_ITERATOR_WITH_INDEX
  #include "concrete_impl.h"
  
  #undef TUPLE_ITERATOR_WITH_INDEX
  #include "concrete_impl.h"
  
  
  #endif // CONCRETE_H
  </code></pre>
  
  <p>What I want to get - is 4 functions:</p>
  
  <ul>
  <li>iterate_tuple </li>
  <li>iterate_tuple_id</li>
  <li>iterate_tuple_back</li>
  <li>iterate_tuple_id_back</li>
  </ul>
  
  <p>But on "_back" functions I have redefinition error. Why?</p>