74 lines
2.8 KiB
Markdown
74 lines
2.8 KiB
Markdown
[basic.scope.block]
|
||
|
||
# 6 Basics [[basic]](./#basic)
|
||
|
||
## 6.4 Scope [[basic.scope]](basic.scope#block)
|
||
|
||
### 6.4.3 Block scope [basic.scope.block]
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/basic.tex#L1391)
|
||
|
||
Each
|
||
|
||
- [(1.1)](#1.1)
|
||
|
||
selection, iteration, or expansion statement ([[stmt.select]](stmt.select "8.5 Selection statements"), [[stmt.iter]](stmt.iter "8.6 Iteration statements"), [[stmt.expand]](stmt.expand "8.7 Expansion statements")),
|
||
|
||
- [(1.2)](#1.2)
|
||
|
||
substatement of such a statement,
|
||
|
||
- [(1.3)](#1.3)
|
||
|
||
[*handler*](except.pre#nt:handler "14.1 Preamble [except.pre]") ([[except.pre]](except.pre "14.1 Preamble")), or
|
||
|
||
- [(1.4)](#1.4)
|
||
|
||
compound statement ([[stmt.block]](stmt.block "8.4 Compound statement or block"))
|
||
that is not the [*compound-statement*](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]") of a [*handler*](except.pre#nt:handler "14.1 Preamble [except.pre]")
|
||
|
||
introduces a [*block scope*](#def:scope,block "6.4.3 Block scope [basic.scope.block]") that includes that statement or [*handler*](except.pre#nt:handler "14.1 Preamble [except.pre]")[.](#1.sentence-1)
|
||
|
||
[*Note [1](#note-1)*:
|
||
|
||
A substatement that is also a block has only one scope[.](#1.sentence-2)
|
||
|
||
â *end note*]
|
||
|
||
A variable that belongs to a block scope is a [*block variable*](#def:block_variable "6.4.3 Block scope [basic.scope.block]")[.](#1.sentence-3)
|
||
|
||
[*Example [1](#example-1)*: int i = 42;int a[10];
|
||
|
||
for (int i = 0; i < 10; i++) a[i] = i;
|
||
|
||
int j = i; // j = 42 â *end example*]
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/basic.tex#L1423)
|
||
|
||
If a declaration
|
||
that is not a name-independent declaration and
|
||
that binds a name in the block scope S of a
|
||
|
||
- [(2.1)](#2.1)
|
||
|
||
[*compound-statement*](stmt.block#nt:compound-statement "8.4 Compound statement or block [stmt.block]") of a [*lambda-expression*](expr.prim.lambda.general#nt:lambda-expression "7.5.6.1 General [expr.prim.lambda.general]"),[*function-body*](dcl.fct.def.general#nt:function-body "9.6.1 General [dcl.fct.def.general]"), or [*function-try-block*](except.pre#nt:function-try-block "14.1 Preamble [except.pre]"),
|
||
|
||
- [(2.2)](#2.2)
|
||
|
||
substatement of a selection or iteration statement
|
||
that is not itself a selection or iteration statement, or
|
||
|
||
- [(2.3)](#2.3)
|
||
|
||
[*handler*](except.pre#nt:handler "14.1 Preamble [except.pre]") of a [*function-try-block*](except.pre#nt:function-try-block "14.1 Preamble [except.pre]")
|
||
|
||
potentially conflicts with a declaration
|
||
whose target scope is the parent scope of S,
|
||
the program is ill-formed[.](#2.sentence-1)
|
||
|
||
[*Example [2](#example-2)*: if (int x = f()) {int x; // error: redeclaration of x}else {int x; // error: redeclaration of x} â *end example*]
|