Dlaczego wypływanie z końca funkcji nie-pustej bez zwracania wartości nie powoduje błędu kompilatora?

Odkąd uświadomiłem sobie wiele lat temu, że domyślnie nie powoduje to błędu (przynajmniej w GCC), zawsze zastanawiałem się dlaczego?

Rozumiem, że możesz wydawać flagi kompilatora, aby wygenerować ostrzeżenie, ale czy nie zawsze musi to być błąd? Dlaczego sensowne jest, aby funkcja nie-pusta, która nie zwraca wartości, była ważna?

Przykład wymagany w komentarzach:

#include <stdio.h>
int stringSize()
{
}

int main()
{
    char cstring[5];
    printf( "the last char is: %c\n", cstring[stringSize()-1] ); 
    return 0;
}

... kompiluje.

questionAnswers(8)

yourAnswerToTheQuestion