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