¿Es legal la declaración de función implícita en C89?

Considere este programa C:

int main()
{
    puts("Hello world!");
    return 0;
}

Esto compila y funciona bien y, según tengo entendido, es legal C89. Sin embargo, no estoy 100% seguro de eso. Compilar en modo C99 con clang me informa queimplicit declaration of function 'puts' is invalid in C99 (lo que me hace pensar que el estándar de C debe haber cambiado en C99 para hacer que la declaración de función implícita sea ilegal, que es lo que estoy tratando de confirmar).

¿Es legal la declaración de función implícita en C89? (incluso si es una mala idea hacerlo (a menos que esté en un desafío de código C ofuscado))

Respuestas a la pregunta(2)

Su respuesta a la pregunta