Недавно я наткнулся на следующее поведение gcc 3.2.2, написание программы c:
В выражении if я забыл скобки функции и написал:
if(myFunc)...
вместо if(myFunc())...
Это не вызвало ошибки и предупреждения, хотя у меня почти все предупреждения включены.
Он просто оценивается как true
.
Почему именно этот документ содержит юридический код?
Поскольку функция существует/имеет адрес?
Кто-нибудь знает, как можно избежать таких ошибок или если есть предупреждение, которое я забыл? Эта проблема лучше решена в более поздних версиях 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)