If C is so evil why is it so successful?

Eric Smith spacewar at gmail.com
Wed Apr 12 16:33:38 CDT 2017


On Wed, Apr 12, 2017 at 9:55 AM, Sean Conner via cctalk <
cctalk at classiccmp.org> wrote:

>   Yeah, I'm having a hard time with that too.  I mean, pedantically, it
> should be:
>
>         #include <stdlib.h>
>         int main(void) { return EXIT_SUCCESS; }
>
> where EXIT_SUCCESS is 0 on every plaform except for some obscure system no
> one has heard of but managed to influence the C committee back in the late
> 80s.
>

Returning zero from main to indicate success is perfectly valid according
to the most recent three C standards.  ISO/IEC 9899:1990(E) §7.10.4.3,
ISO/IEC 9899:1999(E) §7.20.4.3 ¶5 and ISO/IEC 9899:2011(E) §7.22.4.4 ¶5
both requires that either 0 or EXIT_SUCCESS as an argument to exit() be
considered success.  EXIT_SUCCESS may or may not be zero, but zero is
considered success regardless of that.

One annoyance with the way the standard defines the EXIT_x macros is that
if you use other exit status values, including those from sysexits.h (not
part of the C standard), it's possible that an intended failure status
value might happen to match EXIT_SUCCESS on some standard-compliant
implementation.

§5.1.2.2.3 ¶1 of both :1999 and :2011 state that if execution reaches the
closing brace of main without a return statement, that it is equivalent to
returning zero, so even the return statement in this alleged non-portable
example is unnecessary.

On the other hand, the earlier ISO/IEC 9899:1990(E) §5.1.2.2.3 says that
main returning with no value yields an undefined termination status.

-- Eric "not a language lawyer but I play one on the internet" Smith


More information about the cctalk mailing list