Files
2025-10-25 03:02:53 +03:00

61 lines
3.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[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.4Compound statement or block[stmt.block]")[.](#1.sentence-1)
[label:](#nt:label "8.2Label[stmt.label]")
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt [*identifier*](lex.name#nt:identifier "5.11Identifiers[lex.name]") :
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt case [*constant-expression*](expr.const#nt:constant-expression "7.7Constant expressions[expr.const]") :
[*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute syntax and semantics[dcl.attr.grammar]")opt default :
[labeled-statement:](#nt:labeled-statement "8.2Label[stmt.label]")
[*label*](#nt:label "8.2Label[stmt.label]") [*statement*](stmt.pre#nt:statement "8.1Preamble[stmt.pre]")
The optional [*attribute-specifier-seq*](dcl.attr.grammar#nt:attribute-specifier-seq "9.13.1Attribute 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.11Identifiers[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.11Identifiers[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.2Label[stmt.label]") whose [*label*](#nt:label "8.2Label[stmt.label]") is a case or default label
shall be enclosed by ([[stmt.pre]](stmt.pre "8.1Preamble")) a switch statement ([[stmt.switch]](stmt.switch "8.5.3The 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.2Label[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.3The 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.6The 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.7Expansion statements[stmt.expand]") ([[stmt.expand]](stmt.expand "8.7Expansion statements"))[.](#4.sentence-1)