title: Why does a "function name" evaluate to true in C and how to get warned on it
body: <p>I recently stumbled across the following behaviour of gcc 3.2.2 writing a c program:</p>
  
  <p>In an if statement I forgot the braces of a function and wrote:</p>
  
  <p><code>if(myFunc)...</code> instead of <code>if(myFunc())...</code></p>
  
  <p>This did not generate an error neither a warning although I have pretty much every warning turned on. </p>
  
  <p>It simply evaluated to <code>true</code>.
  Why is this writing legal code in the first place ? 
  Because the function  exists/has an address ?
  Does anyone know how one could avoid such mistakes or if there is a warning option I overlooked ? Is this issue better solved in later gcc versions ?</p>
  
  <p>Here the exact compiler call for completeness:</p>
  
  <pre><code> msp430-gcc -g -Os -mmcu=msp430x1611 -Wall -W -Wfloat-equal -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wwrite-strings -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations 
  -Wredundant-decls -Wnested-externs -Wimplicit-function-declaration -Werror
  </code></pre>
  
  <p>(Since I'm forced to use gcc 3.2.3 there is no -Wextra)</p>