[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)
