скомпилируйте с -Wall
, чтобы включить дополнительную проверку работоспособности в компиляторе.
gcc -Wall /tmp/a.c
/tmp/a.c: In function ‘main’:
/tmp/a.c:5: warning: implicit declaration of function ‘f’
/tmp/a.c:6: warning: control reaches end of non-void function
/tmp/a.c: In function ‘f’:
/tmp/a.c:10: warning: control reaches end of non-void function
Обратите внимание, как он отмечает отсутствующие операторы возврата - как "управление достигает конца функции, не являющейся пустым"?
Всегда компилируйте, используя -Wall или аналогичный - вы сэкономите душевную боль позже.
Я могу вспомнить несколько случаев, когда именно эта проблема приводила к исправлению часов или дней отладки - это как быработает, пока не сработает.