In The New C Standard section 5.1.2.2.3 Program termination the author Derek Jones commentary on this lines from the C99 standard:
reaching the } that terminates the main function returns a value of 0
is:
The standard finally having to bow to sloppy existing practices.
Which indicates the rationale was to address poor programming practices with respect to explicitly returning a value from main
. Prior to this the status returned was undefined.
He indicates that many implementations already implemented this even in C90, so the fact that this change already reflected common implementation also probably helped.