¿Por qué un "nombre de función" se evalúa como verdadero en C y cómo recibir una advertencia?

Recientemente me topé con el siguiente comportamiento de gcc 3.2.2 al escribir un programa en c:

En una declaración if, olvidé las llaves de una función y escribí:

if(myFunc)... en lugar deif(myFunc())...

Esto no generó un error ni una advertencia, aunque casi todas las advertencias están activadas.

Simplemente evaluó atrue. ¿Por qué está escribiendo este código legal en primer lugar? ¿Porque la función existe / tiene una dirección? ¿Alguien sabe cómo se pueden evitar tales errores o si hay una opción de advertencia que he pasado por alto? ¿Este problema está mejor resuelto en versiones posteriores de gcc?

Aquí el compilador exacto requiere integridad:

 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

(Como me veo obligado a usar gcc 3.2.3 no hay -Wextra)

Respuestas a la pregunta(5)

Su respuesta a la pregunta