A declaração de função implícita é legal em C89?

Considere este programa C:

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

Isso compila e corre bem e, tanto quanto eu entendo, é legal C89. No entanto, não tenho 100% de certeza sobre isso. Compilando no modo C99 com clang me informa queimplicit declaration of function 'puts' is invalid in C99 (o que me faz pensar que o padrão C deve ter mudado em C99 para tornar a declaração de função implícita ilegal, que é o que estou tentando confirmar).

A declaração de função implícita é legal em C89? (mesmo que seja uma má ideia fazê-lo (a menos que você esteja em um desafio de código C ofuscado))

questionAnswers(2)

yourAnswerToTheQuestion