title: Valid header names
body: <p>I can't understand correctly what does they mean in the following article:</p>
  
  <p><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1566.htm" rel="noreferrer">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1566.htm</a></p>
  
  <blockquote>
    <p>It is interesting to note that C89 explicitly allowed only letters in
    header and include file names. C++ added underscores, and C99 added
    digits. Probably both standards should allow both.</p>
  </blockquote>
  
  <p>I found the following statements in all C and C++ standards:</p>
  
  <p><strong>ISO/IEC 9899:1990</strong></p>
  
  <blockquote>
  <pre><code>6.1.7 Header names
  
  Syntax
  1 header-name:
  &lt; h-char-sequence &gt;
  " q-char-sequence "
  h-char-sequence:
  h-char
  h-char-sequence h-char
  h-char:
  any member of the source character set except
  the new-line character and &gt;
  q-char-sequence:
  q-char
  q-char-sequence q-char
  q-char:
  any member of the source character set except
  the new-line character and "
  </code></pre>
  </blockquote>
  
  <p><strong>ISO/IEC 9899:1990</strong></p>
  
  <blockquote>
  <pre><code>5.2.1 Character sets
  
  ...
  
  Both the basic source and basic execution character sets shall have the following
  members: the 26 uppercase letters of the Latin alphabet
  
  A B C D E F G H I J K L M
  N O P Q R S T U V W X Y Z
  
  the 26 lowercase letters of the Latin alphabet
  
  a b c d e f g h i j k l m
  n o p q r s t u v w x y z
  
  the 10 decimal digits
  
  0 1 2 3 4 5 6 7 8 9
  
  the following 29 graphic characters
  
  ! " # % &amp; ' ( ) * + , — . / :
  ; &lt; = &gt; ? [ \ ] ^ _ { | } ~
  </code></pre>
  </blockquote>
  
  <p>For example, i see underscore and digits even in C89 / C90.</p>