I know most don't get it but I like Forth because it is easy to follow the 
program flow and easy to test. C has too much boilerplate to solve the problem 
of not being able to use white space to keep things organized.

One uses Forth like a combination assembler and high level language. Most all 
the stack fiddle faddle is hidden at the lower assembly like levels. The high 
level code is like reading sentences. It always seems to me to be the most 
straight forward way to tell the computer what to do.

The order is left to right, top to bottom.

Testing can be done at any level, solving the complexity problem of proper 
testing.

I see too many programmers testing a program at the top level with something 
like 20 decision points to navigate through. When it seems to work, they call 
it tested. No wonder things are getting too complex to fix.

It isn't really the programming languages fault but most programming languages 
don't make it any easier.

Dwight


________________________________
From: cctalk <cctalk-boun...@classiccmp.org> on behalf of Eric Smith via cctalk 
<cctalk@classiccmp.org>
Sent: Wednesday, April 12, 2017 2:33:38 PM
To: Sean Conner; General Discussion: On-Topic and Off-Topic Posts
Subject: Re: If C is so evil why is it so successful?

On Wed, Apr 12, 2017 at 9:55 AM, Sean Conner via cctalk <
cctalk@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

Reply via email to