An ambiguity in c89 which will never be fixed

Ancient code rule sparks compiler fight, and commenters are begging everyone to move on

TLDR: A strange rule in the 1989 version of C lets old code behave differently in GCC and Clang, and the disagreement may never be officially resolved because the rule was removed long ago. Commenters split between eye-rolling, compiler blame, and nostalgic tales from people still wrestling with ancient systems.

A dusty old rule from the 1989 C programming standard has accidentally turned into prime internet drama: two major compilers, GCC and Clang, read the same bizarre corner case differently, and because the rule was deleted decades ago, nobody can officially settle it now. In plain English, this is about old C code silently pretending a missing function exists instead of stopping with an error — yes, really — and one tiny extra letter can suddenly send the two tools into total disagreement. Naturally, the community response was less "wow, fascinating" and more "this is why we can’t have nice things."

The strongest mood in the comments is a mix of mockery, exhaustion, and nerd-sniping delight. One reader basically shrugged, "obsolete standard turns out to be insufficiently strict, news at 11," which is the perfect deadpan summary of the whole mess. Another went full parental energy with the universal C/C++ review: "Well… don’t do that." But not everyone was dismissive. One commenter flat-out declared "Clang is wrong," turning a dusty standards question into a compiler loyalty skirmish. Meanwhile, the funniest detour may be a commenter admiring the author’s homepage for its charmingly retro “understated 90s design,” as if the aesthetic matched the fossilized code drama.

And then there’s the old-systems crowd, who arrived with war stories about rebuilding software that still talks to UNIVAC and VAX machines — proof that, against all odds, this ancient weirdness still matters to somebody. So yes, it’s a niche bug hunt. But in the comments, it became a full-on referendum on legacy code, compiler behavior, and whether humanity should finally let C89 rest in peace.

Key Points

  • The article identifies an ambiguity in the C89/C90 standard about where an implicit function declaration is introduced when an undeclared identifier is called.
  • It explains that C89 allowed undeclared function calls to create an implicit `extern int ()` declaration, a feature removed in C99.
  • A declaration example involving `int f(int f[sizeof(f())]);` is accepted by Clang but rejected by GCC.
  • The article attributes the compiler disagreement to the standard phrase "innermost block," which it says is not clearly defined for this case.
  • A second example and an additional redeclaration case are used to argue that GCC and Clang place the implicit declaration in different scopes.

Hottest takes

"insufficiently strict, news at 11" — guenthert
"Well… don’t do that." — bellowsgulch
"Clang is wrong." — kevin_thibedeau
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.