Функции 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 такого поведения можно избежать, но почему это вариант? Почему этоеще позволил?

Ответы на вопрос(5)

Ваш ответ на вопрос