Por que um "nome da função" é avaliado como verdadeiro em C e como ser avisado sobre ele

Recentemente, deparei com o seguinte comportamento do gcc 3.2.2 escrevendo um programa c:

Em uma declaração if, eu esqueci os chavetas de uma função e escrevi:

if(myFunc)... ao invés deif(myFunc())...

Isso não gerou um erro nem um aviso, embora eu tenha praticamente todos os avisos ativados.

Ele simplesmente avalioutrue. Por que esse código legal de escrita é o primeiro? Porque a função existe / tem um endereço? Alguém sabe como alguém pode evitar esses erros ou se há uma opção de aviso que eu ignorei? Esse problema foi resolvido melhor nas versões posteriores do gcc?

Aqui, o compilador exato exige integridade:

 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 sou forçado a usar o gcc 3.2.3, não há -Wextra)

questionAnswers(5)

yourAnswerToTheQuestion