La función C definida como int pero que no tiene una declaración de retorno en el cuerpo aún se compila

Digamos que tiene un código C como este:

#include <stdio.h>

int main(){
    printf("Hello, world!\n");
    printf("%d\n", f());    
}

int f(){

}

Se compila bien con gcc, y la salida (en mi sistema) es:

¡Hola Mundo!

14

Pero ... pero ... ¿cómo es eso posible? Pensé que C no te permitirá compilar algo así porque f () no tiene una declaración return que devuelva un número entero. ¿Por qué está permitido eso? ¿Es una característica de C u omisión del compilador, y de dónde vino el 14?

Respuestas a la pregunta(7)

Su respuesta a la pregunta