title: Struct declared twice?
body: <p>When I try to compile a source file with the Tiny <strong>C</strong> Compiler, I get the following error:</p>
  
  <pre><code>arch/x86/include/asm/ptrace.h:38: error: struct/union/enum already defined
  </code></pre>
  
  <p>Here are lines 9-68 in the header file ptrace.h, which my source file indirectly includes:</p>
  
  <pre><code>#ifdef __i386__
  
  struct pt_regs {
      unsigned long bx;
      unsigned long cx;
      unsigned long dx;
      unsigned long si;
      unsigned long di;
      unsigned long bp;
      unsigned long ax;
      unsigned long ds;
      unsigned long es;
      unsigned long fs;
      unsigned long gs;
      unsigned long orig_ax;
      unsigned long ip;
      unsigned long cs;
      unsigned long flags;
      unsigned long sp;
      unsigned long ss;
  };
  
  #else /* __i386__ */
  
  struct pt_regs {
  /*
   * C ABI says these regs are callee-preserved. They aren't saved on kernel entry
   * unless syscall needs a complete, fully filled "struct pt_regs".
   */
      unsigned long r15;
      unsigned long r14;
      unsigned long r13;
  unsigned long r12;
      unsigned long bp;
      unsigned long bx;
  /* These regs are callee-clobbered. Always saved on kernel entry. */
      unsigned long r11;
      unsigned long r10;
      unsigned long r9;
      unsigned long r8;
      unsigned long ax;
  unsigned long cx;
      unsigned long dx;
      unsigned long si;
      unsigned long di;
  /*
   * On syscall entry, this is syscall#. On CPU exception, this is error code.
   * On hw interrupt, it's IRQ number:
   */
      unsigned long orig_ax;
  /* Return frame for iretq */
      unsigned long ip;
      unsigned long cs;
      unsigned long flags;
      unsigned long sp;
      unsigned long ss;
  /* top of stack page */
  };
  
  #endif /* !__i386__ */
  </code></pre>
  
  <p>By indirectly include, I mean that my source file includes a different header file that includes this header file.
  The struct is not declared twice. What is going wrong?</p>