title: Why are typedef identifiers allowed to be declared multiple times?
body: <p>From the C99 standard, 6.7(5):</p>
  
  <blockquote>
    <p>A declaration specifies the interpretation and attributes of a set of identifiers. A definition of an identifier is a declaration for that identifier that:
    for an object, causes storage to be reserved for that object;
    for a function, includes the function body;
    <strong>for an enumeration constant or typedef name, is the (only) declaration of the identifier.</strong></p>
  </blockquote>
  
  <p>If identifiers with <code>typedef</code> are in fact definitions, then why are they allowed to be declared more than once? Example:</p>
  
  <pre><code>int main()
  {
    typedef int x;
    typedef int x;
  }
  </code></pre>
  
  <p>Above program compiles with no errors. How is this possible? I was expecting the program to give me a multiple definition error.</p>