¿Por qué y cómo GCC compila una función con una declaración de retorno faltante?

#include <stdio.h>

char toUpper(char);

int main(void)
{
    char ch, ch2;
    printf("lowercase input : ");
    ch = getchar();
    ch2 = toUpper(ch);
    printf("%c ==> %c\n", ch, ch2);

    return 0;
}

char toUpper(char c)
{
    if(c>='a'&&c<='z')
        c = c - 32;
}

En la función toUpper, el tipo de retorno es char, pero no hay "retorno" en toUpper (). Y compile el código fuente con gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4), fedora-14.

Por supuesto, se emite una advertencia: "advertencia: el control llega al final de la función no nula", pero funciona bien.

¿Qué ha sucedido en ese código durante la compilación con gcc? Quiero obtener una respuesta sólida en este caso. Gracias :

Respuestas a la pregunta(8)

Su respuesta a la pregunta