¿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)