I just rebuilt a core program that talks to my UNIVAC OS2200 CITA and my VAX ACMS from Linux.

I built this first as a 32-bit binary, and there was noise that I had to cut with a substr function.

In the rebuilding with my MinGW 64-bit Windows cross compiler on Oracle Linux, I had to mine function prototypes out of all the code for exactly this reason.

'for those unaware: c89 has a cool "feature" where, if you try to call a function which doesn't exist, rather than erroring out, the function is implicitly declared as a function with unspecified parameters returning int.'

I'm not testing this, because that is agony.

I'm leaving them a working build, and retiring this month.

This code was written by the living and the dead, and my stewardship is finished. I do not envy the poor soul who must test this.

It was ashes when I excavated it myself. A hat tip to those who have gone before.

> I had to mine function prototypes out of all the code for exactly this reason.

The program that does this is called cproto and it was available back on comp.sources.unix as early as 1989 (if you find yourself with a time machine) and these days is available on nearly every Linux distro.

Implicit declarations are a classic!

Current GCC and clang error on them by default now, but that's a rather recent change.

GCC warns by default since version 5, released more than a decade ago.

My production binary was built on Oracle Linux 5, with gcc 4.1.2.

That version would at least warn with -Wall.

That feature was already present in K&R C, C89 function prototypes were actually taken from the C++ standardisation process back into C, while keeping that behaviour in place.