...
Implicit declaration of functions is not allowed: every function must should be explicitly declared before it can be called. In C89, if a function is called without an explicit prototype, the compiler provides an implicit declaration.
...
If the expression that precedes the parenthesized argument list in a function call consists solely of an identifier, and if no declaration is visible for this identifier, the identifier is implicitly declared exactly as if, in the innermost block containing the function call, the declaration
extern int identifier();
appeared.
A C99 and later implementation will An implementation that conforms to C99 or later might not perform implicit function declarations.
...