Funções C e C ++ sem uma declaração de retorno [duplicado]

Esta pergunta já tem uma resposta aqui:

Por que esse trecho de C ++ é compilado (a função non-void não retorna um valor) [duplicado] 7 respostas

Ao examinar o código no trabalho, encontrei um código (aparentemente) ofensivo no qual uma função tinha um tipo de retorno, mas sem retorno. Eu sabia que o código funcionava, mas assumi que era apenas um bug no compilador.

Escrevi o seguinte teste e executei-o usando meu compilador(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;
}

Análogo ao código que encontrei no trabalho, esse padrão é retornar o resultado da última expressão executada na função.

eu encontreiesta pergunta, mas não estava satisfeito com a resposta. Eu sei que com-Wall -Werror esse comportamento pode ser evitado, mas por que é uma opção? Por que é issoainda permitido?

questionAnswers(5)

yourAnswerToTheQuestion