title: #undef not work as expected in my C program
body: <p>I am writing linear list ADT as my practice in DS class. I use one header file, one function source code and a driver as a whole project. I defined macro "ELEMENT_TYPE" and "MAXSIZE" in the header file. My design is that I can #undef  and immediately #define those two macros in the driver program to change "ELEMENT_TYPE" to any type the driver need.
  If I put these code:</p>
  
  <pre><code>#undef ELEMENT_TYPE
  #define ELEMENT_TYPE char
  #undef MAXSIZE
  #define MAXSIZE 50
  </code></pre>
  
  <p>into the header file after the #define, then in the driver program, the functions can be recognized properly(For example, insertion() 's second augment was "ELEMENT_TYPE", use those code above, IDE shows that insertion() receive a char augment in driver program.) However, if I put those codes into the driver below #include "foo.h", then IDE cannot recognize what augments the fuction should receive and use the initial definition of "ELEMENT_TYPE", in this case, int. Who know what was wrong in my program so that preprocessing directives don't work properly?</p>
  
  <p>Here are the original codes:
  driver.c
  <a href="https://paste.ubuntu.com/p/6B76vmk6nN/" rel="nofollow noreferrer">https://paste.ubuntu.com/p/6B76vmk6nN/</a></p>
  
  <p>linear_list.c
  <a href="https://paste.ubuntu.com/p/SHq4W5zkGM/" rel="nofollow noreferrer">https://paste.ubuntu.com/p/SHq4W5zkGM/</a></p>
  
  <p>linear_list.h
  <a href="https://paste.ubuntu.com/p/VY8vcgFD89/" rel="nofollow noreferrer">https://paste.ubuntu.com/p/VY8vcgFD89/</a></p>
  
  <p>PS:I am not native English speaker, so maybe there are some places I didn't express clearly. Point them out and I'll add more details if needed.</p>