Date: Wed, 12 Aug 2020 11:26:22 +0000
Am Dienstag, den 11.08.2020, 17:29 +0200 schrieb Jens Maurer:
> On 11/08/2020 08.37, Uecker, Martin via Liaison wrote:
> >
> > Hi all,
> >
> > I recently proposed changes to the C grammar which got
> > voted into C2X by WG14 (N2508, also see N2496).
> >
> > This allows placing of labels everywhere in a compound
> > statement, even before declarations and at the end
> > of a block, which was not possible in C so far.
> >
> > Example:
> >
> > {
> > start:
> > int i;
> > mid:
> > int j;
> > end:
> > }
> >
> > It has been pointed out to me that while C++ allows
> > labels before declarations, it does not allow them
> > at the end of a compound statement.
> >
> > I plan to propose a change to C++ to make this
> > possible too and I wonder if you have any comments
> > or suggestions related to this?
>
> I'm lukewarm on this. Your example becomes valid C++
> by adding a ";" after the "end:".
>
> So, having the change does not materially alter the
> expressiveness of the common subset of C++ and C.
It would enhance compatibility.
> I'd like to see the wording change for C++ to understand
> whether it's likely low-cost overall to add this.
Ok, no wording yet, but the suggested grammar change would
be as follows (omitting attributes for simplicity):
8.1(1) gets refactored from
statement:
labeled-statement
expression-statement
compound-statement
selection-statement
iteration-statement
jump-statement
declaration-statement
try-block
to the following:
statement:
labeled-statement
unlabeled-statement
declaration-statement
unlabeled-statement:
expression-statement
compound-statement
selection-statement
iteration-statement
jump-statement
try-block
8.2(1) gets refactored from
labeled-statement:
identifier : statement
case constant-expression : statement
default : statement
to:
labeled-statement:
label statement
label:
identifier :
case constant-expression :
default :
In 8.4(1), we then do the actual
change which is changing
compound-statement:
statement-seq
statement-seq:
labeled-statement
statement-seq statement
to
compound-statement:
statement-seq
statement-seq:
statement-seq-item
statement-seq statement-seq-item
statement-seq-item:
label
unlabeled-statement
declaration
Best,
Martin
> On 11/08/2020 08.37, Uecker, Martin via Liaison wrote:
> >
> > Hi all,
> >
> > I recently proposed changes to the C grammar which got
> > voted into C2X by WG14 (N2508, also see N2496).
> >
> > This allows placing of labels everywhere in a compound
> > statement, even before declarations and at the end
> > of a block, which was not possible in C so far.
> >
> > Example:
> >
> > {
> > start:
> > int i;
> > mid:
> > int j;
> > end:
> > }
> >
> > It has been pointed out to me that while C++ allows
> > labels before declarations, it does not allow them
> > at the end of a compound statement.
> >
> > I plan to propose a change to C++ to make this
> > possible too and I wonder if you have any comments
> > or suggestions related to this?
>
> I'm lukewarm on this. Your example becomes valid C++
> by adding a ";" after the "end:".
>
> So, having the change does not materially alter the
> expressiveness of the common subset of C++ and C.
It would enhance compatibility.
> I'd like to see the wording change for C++ to understand
> whether it's likely low-cost overall to add this.
Ok, no wording yet, but the suggested grammar change would
be as follows (omitting attributes for simplicity):
8.1(1) gets refactored from
statement:
labeled-statement
expression-statement
compound-statement
selection-statement
iteration-statement
jump-statement
declaration-statement
try-block
to the following:
statement:
labeled-statement
unlabeled-statement
declaration-statement
unlabeled-statement:
expression-statement
compound-statement
selection-statement
iteration-statement
jump-statement
try-block
8.2(1) gets refactored from
labeled-statement:
identifier : statement
case constant-expression : statement
default : statement
to:
labeled-statement:
label statement
label:
identifier :
case constant-expression :
default :
In 8.4(1), we then do the actual
change which is changing
compound-statement:
statement-seq
statement-seq:
labeled-statement
statement-seq statement
to
compound-statement:
statement-seq
statement-seq:
statement-seq-item
statement-seq statement-seq-item
statement-seq-item:
label
unlabeled-statement
declaration
Best,
Martin
Received on 2020-08-12 06:29:50