При просмотре кода на работе я обнаружил некоторый (по-видимому) оскорбительный код, в котором функция имела тип возврата, но не возвращала. Я знал, что код работал, но предположил, что это всего лишь ошибка в компиляторе.
Я написал следующий тест и запустил его с помощью моего компилятора (gcc (Homebrew gcc 5.2.0) 5.2.0)
#include <stdio.h>
int f(int a, int b) {
int c = a + b;
}
int main() {
int x = 5, y = 6;
printf("f(%d,%d) is %d\n", x, y, f(x,y)); // f(5,6) is 11
return 0;
}
Аналогично коду, который я нашел на работе, это по умолчанию возвращает результат последнего выражения, выполняемого в функции.
Я нашел этот вопрос, но не был удовлетворен ответом. Я знаю, что с помощью -Wall -Werror
этого поведения можно избежать, но почему это вариант? Почему это все еще разрешено?