Init
This commit is contained in:
60
cppdraft/stmt/label.md
Normal file
60
cppdraft/stmt/label.md
Normal file
@@ -0,0 +1,60 @@
|
||||
[stmt.label]
|
||||
|
||||
# 8 Statements [[stmt]](./#stmt)
|
||||
|
||||
## 8.2 Label [stmt.label]
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/statements.tex#L163)
|
||||
|
||||
A label can be added to a statement or
|
||||
used anywhere in a [*compound-statement*](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]")[.](#1.sentence-1)
|
||||
|
||||
[label:](#nt:label "8.2 Label [stmt.label]")
|
||||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") :
|
||||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt case [*constant-expression*](expr.const#nt:constant-expression "7.7 Constant expressions [expr.const]") :
|
||||
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]")opt default :
|
||||
|
||||
[labeled-statement:](#nt:labeled-statement "8.2 Label [stmt.label]")
|
||||
[*label*](#nt:label "8.2 Label [stmt.label]") [*statement*](stmt.pre#nt:statement "8.1 Preamble [stmt.pre]")
|
||||
|
||||
The optional [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1 Attribute syntax and semantics [dcl.attr.grammar]") appertains to the label[.](#1.sentence-2)
|
||||
|
||||
The only use of a label with an [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]") is
|
||||
as the target of a goto[.](#1.sentence-3)
|
||||
|
||||
No two labels in a function shall have the same [*identifier*](lex.name#nt:identifier "5.11 Identifiers [lex.name]")[.](#1.sentence-4)
|
||||
|
||||
A label can be used in a goto statement
|
||||
before its introduction[.](#1.sentence-5)
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/statements.tex#L190)
|
||||
|
||||
A [*labeled-statement*](#nt:labeled-statement "8.2 Label [stmt.label]") whose [*label*](#nt:label "8.2 Label [stmt.label]") is a case or default label
|
||||
shall be enclosed by ([[stmt.pre]](stmt.pre "8.1 Preamble")) a switch statement ([[stmt.switch]](stmt.switch "8.5.3 The switch statement"))[.](#2.sentence-1)
|
||||
|
||||
[3](#3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/statements.tex#L198)
|
||||
|
||||
A [*control-flow-limited statement*](#def:statement,control-flow-limited "8.2 Label [stmt.label]") is a statement S for which:
|
||||
|
||||
- [(3.1)](#3.1)
|
||||
|
||||
a case or default label appearing within S shall
|
||||
be associated with a switch statement ([[stmt.switch]](stmt.switch "8.5.3 The switch statement")) within S, and
|
||||
|
||||
- [(3.2)](#3.2)
|
||||
|
||||
a label declared in S shall only be referred to by a
|
||||
statement ([[stmt.goto]](stmt.goto "8.8.6 The goto statement")) in S[.](#3.sentence-1)
|
||||
|
||||
[4](#4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/statements.tex#L210)
|
||||
|
||||
An identifier label shall not be enclosed
|
||||
by an [*expansion-statement*](stmt.expand#nt:expansion-statement "8.7 Expansion statements [stmt.expand]") ([[stmt.expand]](stmt.expand "8.7 Expansion statements"))[.](#4.sentence-1)
|
||||
Reference in New Issue
Block a user