Почему «имя функции» оценивается как истина в C и как получить об этом предупреждение

Я недавно наткнулся на следующее поведение gcc 3.2.2 при написании программы на ac:

В операторе if я забыл фигурные скобки функции и написал:

if (myFunc) ... вместо if (myFunc ()) ...

Это не вызывало ни ошибки, ни предупреждения, хотя у меня почти все предупреждения включены.

Он просто оценивается как истина . Почему вообще это юридический кодекс? Потому что функция существует / имеет адрес? Кто-нибудь знает, как можно избежать таких ошибок или есть ли вариант предупреждения, который я пропустил? Решена ли эта проблема в более поздних версиях gcc?

Вот точный вызов компилятора для полноты:

 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

(Поскольку я вынужден использовать gcc 3.2.3, -Wextra не существует)

11
задан Martin 1 December 2010 в 19:24
поделиться