title: What naming constraints apply to C# conditional compilation symbols?
body: <p>What rules apply to the names of conditional compilation symbols in C#?</p>
  
  <p>I've consulted the <a href="https://msdn.microsoft.com/en-us/library/yt3yck0x.aspx" rel="nofollow">#define documentation</a>, the <a href="https://msdn.microsoft.com/en-us/library/0feaad6z.aspx" rel="nofollow">/define compiler switch documentation</a>, and the <a href="https://msdn.microsoft.com/en-us/library/aa691098(v=vs.71).aspx" rel="nofollow">C# language specification</a>. The #define and /define docs just say that you can define a symbol name, and that symbol names don't conflict with variable names. The language spec says that there is a "conditional-symbol" token, but doesn't appear to comment on what constitutes a valid symbol token - I might not be looking in quite the right place?</p>
  
  <ul>
  <li>Can conditional compilation symbols begin with numbers? </li>
  <li>Can they contain special characters such as . (e.g. for use in a version-number-related symbol)? How about non-breaking spaces? </li>
  <li>How about characters like #, {}, []?</li>
  </ul>
  
  <p><strong>EDIT</strong>: a link to <em>authoritative documentation</em> would be useful</p>