title: Typechecking macro arguments in C
body: <p>Is it possible to typecheck arguments to a #define macro? For example:</p>
  
  <pre><code>typedef enum
  {
      REG16_A,
      REG16_B,
      REG16_C
  }REG16;
  
  #define read_16(reg16)  read_register_16u(reg16); \
                          assert(typeof(reg16)==typeof(REG16));
  </code></pre>
  
  <p>The above code doesn't seem to work. What am I doing wrong?</p>
  
  <p>BTW, I am using gcc, and I can guarantee that I will always be using gcc in this project. The code does not need to be portable.</p>