title: Why does macro expansion add a space sometimes?
body: <p>If I do this:</p>
  <pre><code>#define F a
  F/
  </code></pre>
  <p>It expands to <code>a/</code> <a href="https://gcc.godbolt.org/z/reGxqz" rel="nofollow noreferrer"><kbd>godbolt</kbd></a></p>
  <p>If I do this:</p>
  <pre><code>#define F /
  F/
  </code></pre>
  <p>It expands to <code>/ /</code> with a space in between <a href="https://gcc.godbolt.org/z/nYhzGn" rel="nofollow noreferrer"><kbd>goodbolt</kbd></a></p>
  <p>But if I convert it to a string, and print it, it doesn't add any spaces <a href="https://gcc.godbolt.org/z/bTnsnK" rel="nofollow noreferrer"><kbd>goodbolt</kbd></a>:</p>
  <pre><code>#include &lt;stdio.h&gt;
  
  #define STR_IMPL(x) #x
  #define STR(x) STR_IMPL(x)
  
  #define F /
  
  
  int main() {
    puts(STR(F/));
  }
  </code></pre>
  <p>Why is there a space in between, but only some of the time? Is it allowed to add more spaces in other cases?</p>