title: Macro Name and Replacement-list are Same
body: <p>I have found some preprocessing directives in which macro name and replacement-list are same. For example, some preprocessing directives in stdbool.h provided by gcc.</p>
  
  <pre><code>#else /* __cplusplus */
  
  /* Supporting &lt;stdbool.h&gt; in C++ is a GCC extension.  */
  #define _Bool   bool
  #define bool    bool
  #define false   false
  #define true    true
  
  #endif /* __cplusplus */
  </code></pre>
  
  <p>I don't understand why the programmer wrote these preprocessing directives. They are useless, and the replacements will waste time. I know that this don't cause infinite recursion. How to avoid infinite recursion? What's the related provisions in C standard?</p>