eben...

die meisten Compiler halten sich nicht genau an den Standard, und akzeptieren Code der eigentlich nicht korrekt ist.

Das hat mit dazu beigetragen, daß viele Leute einfach falsch programmieren.
Denn wenn man C lernt, und man erfährt alles mögliche über Funktionen, Rückgabewerte etc.
dann fällt es anfangs vielleicht schwer zu verstehen warum auch main einen Rückgabewert hat.

Also wird das einfach unter den Tisch gekehrt, und fast jedes Buch, oder jeder Lehrer fängt einfach mit void main() an.
Denn es funktioniert ja...
Der Compiler frisst den Code, die meisten geben nichtmal eine Warnung aus.

Aber wie gesagt...
Darauf kann man sich nicht verlassen.

Man lernt ja nicht "C für gcc" oder "C++ für Visual C++"...
man lernt C bzw. C++ allgemeingültig für jeden beliebigen standardkonformen Compiler.