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


Groups > comp.lang.c > #168617

Re: Christmas Quiz 2022

Path csiph.com!news.mixmin.net!eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
From Keith Thompson <Keith.S.Thompson+u@gmail.com>
Newsgroups comp.lang.c
Subject Re: Christmas Quiz 2022
Date Tue, 20 Dec 2022 10:22:05 -0800
Organization None to speak of
Lines 80
Message-ID <87pmceq6k2.fsf@nosuchdomain.example.com> (permalink)
References <tnnspa$27vkp$1@paganini.bofh.team> <20221220054654.91@kylheku.com> <87tu1quou7.fsf@bsb.me.uk> <tnshp9$mh7i$1@dont-email.me> <87ili6unpn.fsf@bsb.me.uk> <tnsis8$mh7i$2@dont-email.me> <tnsl3s$mh7i$3@dont-email.me>
MIME-Version 1.0
Content-Type text/plain
Injection-Info reader01.eternal-september.org; posting-host="e07f61ae636564fa3e440a4cbc40a9ec"; logging-data="803716"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+0rpD8biWQYgTqDUT3la0d"
User-Agent Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
Cancel-Lock sha1:M+sAqXcXuh1egZb+T11DmBL8S/U= sha1:+IGbJ13t4XVEd3bqSuxTiamR2R0=
Xref csiph.com comp.lang.c:168617

Show key headers only | View raw


Lew Pitcher <lew.pitcher@digitalfreehold.ca> writes:
> On Tue, 20 Dec 2022 15:03:36 +0000, Lew Pitcher wrote:
>
>> On Tue, 20 Dec 2022 14:57:56 +0000, Ben Bacarisse wrote:
> [snip]
>>>> The notable point is that the semicolon between clause-1 and
>>>> expression-2 is /not/ part of clause-1, but is, instead part of the
>>>> for statement itself.
>>> 
>>> But that does not help if the grammar for a declaration still includes
>>> a semicolon.  I wonder what all the relevant parts of the draft you are
>>> referring to look like when taken together.
>>> 
>>>> Because of this, I don't believe that your count can be correct.
>>>> But, I'm willing to be educated on this :-)
>>> 
>>> Well, I did add (but then deleted) that the count depends on how the
>>> grammar is structured.  I should look at a more recent draft that will
>>> have taken the confirmed C11 text as a starting point.  I might do that
>>> later, but I am in a rush!
>> 
>> Perhaps I've got an outdated copy of the draft standard, and the semi-
>> colon question was asked and answered in a later release.
>> 
>> Your explanation sounds valid to me. 'Tis a puzzle to be resolved later.
>
> Oops... I found it.
>
> Under 6.8.5 Iteration statements
> Syntax
>   ...
>   for ( expression ; expression ; expression ) statement
>   for ( declaration expression ; expression ) statement
>
> (all expressions are marked optional)
>
> Crisis averted. You are indeed correct, and I've learned something
> new today.  :-)
>
> But, that doesn't explain why 6.8.5.3 ("the for statement") shows
> the syntax it does. Perhaps the draft missed something in resolving
> the text between 6.8.5 and 6.8.5.3.

Summary: You've found a bug in the standard, and not just in the draft.

Yes, the grammar is defined in 6.8.5 "Iteration statements".  The text in
6.8.5.3 "The for statement" talks about the semantics of for statements:

    The statement
    
        for ( clause-1 ; expression-2 ; expression-3 ) statement

    behaves as follows: [...]
    If clause-1 is a declaration, [...]

The problem is that if clause-1 is a declaration, it includes its own
trailing semicolon, which contradicts the grammar in 6.8.5.

The ability to have a declaration in the header of a for statement was
introduced in C99 (borrrowed from C++).  In C90, the "Iteration
statements" and "The for statement" sections were consistent, and the
grammar was

    for ( expression[opt] ; expression[opt] ; expression[opt ) statement

(I use square brackets to denote a subscript.)

My guess is that when the grammar was updated for C99, the author of the
update initially tried to have a unified grammar, replacing the first
expression by "clause-1" which could be either an expression or a
declaration.  They then realized that semicolon caused a problem and
updated 6.8.5 accordingly, but forgot to update 6.8.5.3.

This error occurs in the published C99 and C11 standards and in drafts
of C17 and C23 (N3054).

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
Working, but not speaking, for XCOM Labs
void Void(void) { Void(); } /* The recursive call of the void */

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


Thread

Christmas Quiz 2022 Roman P <invalid@example.com> - 2022-12-18 20:00 +0000
  Re: Christmas Quiz 2022 Tony Oliver <guinness.tony@gmail.com> - 2022-12-18 13:18 -0800
    Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-18 16:48 -0800
    Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-18 17:18 -0800
      Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-19 19:39 -0800
    Re: Christmas Quiz 2022 Niles Rogoff <eternal-september@niles.xyz> - 2022-12-27 01:22 -0800
      Re: Christmas Quiz 2022 Öö Tiib <ootiib@hot.ee> - 2022-12-27 01:58 -0800
        Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-27 10:25 -0800
      Re: Christmas Quiz 2022 James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-12-27 05:07 -0500
        Re: Christmas Quiz 2022 scott@slp53.sl.home (Scott Lurndal) - 2022-12-27 16:06 +0000
          Re: Christmas Quiz 2022 scott@slp53.sl.home (Scott Lurndal) - 2022-12-27 17:42 +0000
          Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-27 13:53 -0800
    Re: Christmas Quiz 2022 Niles Rogoff <eternal-september@niles.xyz> - 2022-12-27 01:24 -0800
      Re: Christmas Quiz 2022 scott@slp53.sl.home (Scott Lurndal) - 2022-12-27 16:07 +0000
  Re: Christmas Quiz 2022 Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-18 21:22 +0000
    Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-18 21:40 +0000
    Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-18 17:02 -0800
    Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-18 17:20 -0800
  Re: Christmas Quiz 2022 red floyd <no.spam.here@its.invalid> - 2022-12-18 13:36 -0800
  Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-18 13:48 -0800
    Re: Christmas Quiz 2022 Siri Cruise <chine.bleu@yahoo.com> - 2022-12-18 14:57 -0800
      Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-18 15:43 -0800
        Re: Christmas Quiz 2022 Lynn McGuire <lynnmcguire5@gmail.com> - 2022-12-19 23:40 -0600
      Re: Christmas Quiz 2022 "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> - 2022-12-20 14:01 -0800
  Re: Christmas Quiz 2022 Kaz Kylheku <864-117-4973@kylheku.com> - 2022-12-20 13:49 +0000
    Re: Christmas Quiz 2022 Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-20 14:33 +0000
      Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 14:44 +0000
        Re: Christmas Quiz 2022 Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-20 14:57 +0000
          Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 15:03 +0000
            Re: Christmas Quiz 2022 David Brown <david.brown@hesbynett.no> - 2022-12-20 16:32 +0100
            Re: Christmas Quiz 2022 Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 15:41 +0000
              Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-20 10:22 -0800
                Re: for() syntax (Was: Christmas Quiz 2022) Lew Pitcher <lew.pitcher@digitalfreehold.ca> - 2022-12-20 18:54 +0000
                Re: for() syntax Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-20 12:08 -0800
                Re: for() syntax (Was: Christmas Quiz 2022) Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-26 06:48 -0800
                Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-26 06:25 -0800
              Re: Christmas Quiz 2022 Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-26 06:24 -0800
                Re: Christmas Quiz 2022 Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2022-12-26 13:05 -0800
  Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 12:46 -0800
    Re: Christmas Quiz 2022 Paavo Helde <eesnimi@osa.pri.ee> - 2022-12-20 23:49 +0200
      Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 14:00 -0800
        Re: Christmas Quiz 2022 Paavo Helde <eesnimi@osa.pri.ee> - 2022-12-21 00:13 +0200
          Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 14:38 -0800
    Re: Christmas Quiz 2022 Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-12-20 21:31 -0800
      Re: Christmas Quiz 2022 David Brown <david.brown@hesbynett.no> - 2022-12-21 12:02 +0100

csiph-web