Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.c > #143133

Re: for ... else blocks

From "Rick C. Hodgin" <rick.c.hodgin@gmail.com>
Newsgroups comp.lang.c, comp.lang.c++
Subject Re: for ... else blocks
Date 2019-04-16 15:06 -0400
Organization Liberty Software Foundation
Message-ID <q9591c$v09$1@dont-email.me> (permalink)
References <q958g9$rfp$1@dont-email.me>

Cross-posted to 2 groups.

Show all headers | View raw


On 4/16/2019 2:57 PM, Rick C. Hodgin wrote:
> I'm curious what people's thought are on this idea.  It allows the initial
> test on the for {..} block to enter the block, or fall-through to the else
> clause.  Subsequent tests on the for {..} block that fail simply exit out
> past the last }.
> 
>      for (init; test; incr)
>      {
>          // for code here
> 
>      } else {
>          // else code here
>      }
> 
> It's the equivalent of:
> 
>      init;
>      if (test)
>      {
>          goto skip_first_iteration;
>          for ( ; test; incr)
>          {
> skip_first_iteration:

Should be "skip_first_test:".

>              // for code here
>          }
> 
>      } else {
>          // else code here
>      }
> 
> Seems a natural progression.  One I could use quite often due to the
> need to test the conditions outside of the for {..} block today before
> entering it with then-known valid data.  If the test for a valid state
> could be incorporated into the generic iterative test, and the else
> clause added, it would be more natural methinks.

Another variant could be:

     for_if (test1; init; test2; incr)
     {
     } else {
     }

test1 is the if (test1) test, and if it fails, goes to the else.  The
test2 is the iterative test which processes like normal.  This one could
be used when test1 and test2 are different, or are not overlapping.

Of course "else if" blocks could also be used, and I think also a new
concept of "else for" block could also be used:

     for (init1; test1; incr1)
     {
         // First for code here

     } else for (init2; test2; incr2) {
         // Second for code here

     } else for (init3; test3; incr3) {
         // Third for code here

     } else {
         // Fallthrough code
     }

Same for:

     for_if (test1_1; init1; test1_2; incr1)
     {
         // First for_if code here

     } else for_if (test1_1; init1; test1_2; incr1) {
         // Second for_if code here

     } else for_if (test1_1; init1; test1_2; incr1) {
         // Third for_if code here

     } else {
         // Fallthrough code
     }

And, of course, for {..} and for_if {..} blocks could be intermixed.

-- 
Rick C. Hodgin

Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

for ... else blocks "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-04-16 14:57 -0400
  Re: for ... else blocks "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-04-16 15:06 -0400
    Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-16 20:35 +0100
      Re: for ... else blocks "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-04-16 17:02 -0400
        Re: for ... else blocks David Brown <david.brown@hesbynett.no> - 2019-04-16 23:36 +0200
          Re: for ... else blocks "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2019-04-17 00:45 +0200
            Re: for ... else blocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-04-17 01:06 +0100
              Re: for ... else blocks "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2019-04-17 04:45 +0200
                Re: for ... else blocks David Brown <david.brown@hesbynett.no> - 2019-04-17 09:32 +0200
                Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-17 11:38 +0100
                Re: for ... else blocks David Brown <david.brown@hesbynett.no> - 2019-04-17 14:05 +0200
                Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-17 13:57 +0100
                Re: for ... else blocks David Brown <david.brown@hesbynett.no> - 2019-04-17 15:36 +0200
                Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-17 15:16 +0100
                Re: for ... else blocks David Brown <david.brown@hesbynett.no> - 2019-04-17 17:51 +0200
                Re: for ... else blocks "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2019-04-17 16:15 +0200
                Re: for ... else blocks "Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com> - 2019-04-17 16:24 +0200
                Re: for ... else blocks David Brown <david.brown@hesbynett.no> - 2019-04-17 17:55 +0200
                Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-17 17:44 +0100
                Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-17 17:48 +0100
                Re: for ... else blocks fir <profesor.fir@gmail.com> - 2019-04-17 10:18 -0700
                Re: for ... else blocks fir <profesor.fir@gmail.com> - 2019-04-17 10:32 -0700
                Re: for ... else blocks fir <profesor.fir@gmail.com> - 2019-04-17 10:38 -0700
                Re: for ... else blocks fir <profesor.fir@gmail.com> - 2019-04-17 12:12 -0700
                Re: for ... else blocks fir <profesor.fir@gmail.com> - 2019-04-17 12:25 -0700
                Re: for ... else blocks fir <profesor.fir@gmail.com> - 2019-04-17 12:39 -0700
                Re: for ... else blocks fir <profesor.fir@gmail.com> - 2019-04-17 15:52 -0700
                Re: for ... else blocks fir <profesor.fir@gmail.com> - 2019-04-17 16:50 -0700
                Re: for ... else blocks fir <profesor.fir@gmail.com> - 2019-04-17 13:58 -0700
                Re: for ... else blocks David Brown <david.brown@hesbynett.no> - 2019-04-18 12:21 +0200
                Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-18 18:54 +0100
                Re: for ... else blocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-04-18 20:36 +0100
                Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-18 21:15 +0100
                Re: for ... else blocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-04-18 21:46 +0100
                Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-17 15:05 +0100
                Re: for ... else blocks "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-04-17 10:55 -0400
                Re: for ... else blocks Ike Naar <ike@iceland.freeshell.org> - 2019-04-18 05:57 +0000
                Re: for ... else blocks Ben Bacarisse <ben.usenet@bsb.me.uk> - 2019-04-17 20:43 +0100
  Re: for ... else blocks Chad <cdalten@gmail.com> - 2019-04-16 12:15 -0700
  Re: for ... else blocks Bart <bc@freeuk.com> - 2019-04-16 20:27 +0100
  Re: for ... else blocks Christian Gollwitzer <auriocus@gmx.de> - 2019-04-16 21:34 +0200
    Re: for ... else blocks "Rick C. Hodgin" <rick.c.hodgin@gmail.com> - 2019-04-16 16:54 -0400
    Re: for ... else blocks David Brown <david.brown@hesbynett.no> - 2019-04-16 23:32 +0200

csiph-web