Функции C и C ++ без оператора возврата [дубликат]
На этот вопрос уже есть ответ здесь:
Почему этот фрагмент кода C ++ компилируется (не-void функция не возвращает значение) [duplicate] 7 ответовПросматривая код на работе, я обнаружил некоторый (казалось бы) оскорбительный код, в котором функция имела тип возврата, но не возвращала. Я знал, что код работает, но предположил, что это просто ошибка в компиляторе.
Я написал следующий тест и запустил его, используя мой компилятор(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
такого поведения можно избежать, но почему это вариант? Почему этоеще позволил?