Skip to content

Commit 90f882a

Browse files
author
Colin Robertson
committed
Add C17 expressions and declarations
1 parent db015dc commit 90f882a

File tree

2 files changed

+326
-262
lines changed

2 files changed

+326
-262
lines changed
Lines changed: 210 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -1,173 +1,219 @@
11
---
22
title: "Summary of Declarations"
3-
ms.date: "11/04/2016"
3+
description: "Learn about the standard C grammar for declarations as implemented by the Microsoft C/C++ compiler."
4+
ms.date: 10/30/2020
45
ms.assetid: 53a5e9e5-1a33-40b5-9dea-7f669b479329
56
---
67
# Summary of Declarations
78

8-
*`declaration`*:<br/>
9-
&nbsp;&nbsp;&nbsp;&nbsp;*`declaration-specifiers`* *`attribute-seq`*<sub>opt</sub> *`init-declarator-list`*<sub>opt</sub> **`;`**
10-
11-
*`declaration-specifiers`*:<br/>
12-
&nbsp;&nbsp;&nbsp;&nbsp;*`storage-class-specifier`* *`declaration-specifiers`*<sub>opt</sub><br/>
13-
&nbsp;&nbsp;&nbsp;&nbsp;*`type-specifier`* *`declaration-specifiers`*<sub>opt</sub><br/>
14-
&nbsp;&nbsp;&nbsp;&nbsp;*`type-qualifier`* *`declaration-specifiers`*<sub>opt</sub>
15-
16-
*`attribute-seq`* :&nbsp;&nbsp;&nbsp;&nbsp;/\* Microsoft-specific \*/<br/>
17-
&nbsp;&nbsp;&nbsp;&nbsp;*`attribute`* *`attribute-seq`*<sub>opt</sub>
18-
19-
*`attribute`* : one of&nbsp;&nbsp;&nbsp;&nbsp;/\* Microsoft-specific \*/<br/>
20-
&nbsp;&nbsp;&nbsp;&nbsp;[`__asm`](../assembler/inline/asm.md) [`__clrcall`](../cpp/clrcall.md) [`__stdcall`](../cpp/stdcall.md) [`__based`](../cpp/based-grammar.md) [`__fastcall`](../cpp/fastcall.md) [`__thiscall`](../cpp/thiscall.md) [`__cdecl`](../cpp/cdecl.md) [`__inline`](../cpp/inline-functions-cpp.md) [`__vectorcall`](../cpp/vectorcall.md)
21-
22-
*`init-declarator-list`*:<br/>
23-
&nbsp;&nbsp;&nbsp;&nbsp;*`init-declarator`*<br/>
24-
&nbsp;&nbsp;&nbsp;&nbsp;*`init-declarator-list`* **`,`** *`init-declarator`*
25-
26-
*`init-declarator`*:<br/>
27-
&nbsp;&nbsp;&nbsp;&nbsp;*`declarator`*<br/>
28-
&nbsp;&nbsp;&nbsp;&nbsp;*`declarator`* **`=`** *`initializer`* /\* For scalar initialization \*/
29-
30-
*`storage-class-specifier`*:<br/>
31-
&nbsp;&nbsp;&nbsp;&nbsp;**`auto`**<br/>
32-
&nbsp;&nbsp;&nbsp;&nbsp;**`register`**<br/>
33-
&nbsp;&nbsp;&nbsp;&nbsp;**`static`**<br/>
34-
&nbsp;&nbsp;&nbsp;&nbsp;**`extern`**<br/>
35-
&nbsp;&nbsp;&nbsp;&nbsp;**`typedef`**<br/>
36-
&nbsp;&nbsp;&nbsp;&nbsp;**`__declspec (`** *`extended-decl-modifier-seq`* **`)`** /\* Microsoft-specific \*/
37-
38-
*`type-specifier`*:<br/>
39-
&nbsp;&nbsp;&nbsp;&nbsp;**`void`**<br/>
40-
&nbsp;&nbsp;&nbsp;&nbsp;**`char`**<br/>
41-
&nbsp;&nbsp;&nbsp;&nbsp;**`short`**<br/>
42-
&nbsp;&nbsp;&nbsp;&nbsp;**`int`**<br/>
43-
&nbsp;&nbsp;&nbsp;&nbsp;**`__int8`** /\* Microsoft-specific \*/<br/>
44-
&nbsp;&nbsp;&nbsp;&nbsp;**`__int16`** /\* Microsoft-specific \*/<br/>
45-
&nbsp;&nbsp;&nbsp;&nbsp;**`__int32`** /\* Microsoft-specific \*/<br/>
46-
&nbsp;&nbsp;&nbsp;&nbsp;**`__int64`** /\* Microsoft-specific \*/<br/>
47-
&nbsp;&nbsp;&nbsp;&nbsp;**`long`**<br/>
48-
&nbsp;&nbsp;&nbsp;&nbsp;**`float`**<br/>
49-
&nbsp;&nbsp;&nbsp;&nbsp;**`double`**<br/>
50-
&nbsp;&nbsp;&nbsp;&nbsp;**`signed`**<br/>
51-
&nbsp;&nbsp;&nbsp;&nbsp;**`unsigned`**<br/>
52-
&nbsp;&nbsp;&nbsp;&nbsp;*`struct-or-union-specifier`*<br/>
53-
&nbsp;&nbsp;&nbsp;&nbsp;*`enum-specifier`*<br/>
54-
&nbsp;&nbsp;&nbsp;&nbsp;*`typedef-name`*
55-
56-
*`type-qualifier`*:<br/>
57-
&nbsp;&nbsp;&nbsp;&nbsp;**`const`**<br/>
58-
&nbsp;&nbsp;&nbsp;&nbsp;**`volatile`**
59-
60-
*`declarator`*:<br/>
61-
&nbsp;&nbsp;&nbsp;&nbsp;*`pointer`*<sub>opt</sub> *`direct-declarator`*
62-
63-
*`direct-declarator`*:<br/>
64-
&nbsp;&nbsp;&nbsp;&nbsp;*`identifier`*<br/>
65-
&nbsp;&nbsp;&nbsp;&nbsp;**`(`** *`declarator`* **`)`**<br/>
66-
&nbsp;&nbsp;&nbsp;&nbsp;*`direct-declarator`* **`[`** *`constant-expression`*<sub>opt</sub> **`]`**<br/>
67-
&nbsp;&nbsp;&nbsp;&nbsp;*`direct-declarator`* **`(`** *`parameter-type-list`* **`)`** /\* New-style declarator \*/<br/>
68-
&nbsp;&nbsp;&nbsp;&nbsp;*`direct-declarator`* **`(`** *`identifier-list`*<sub>opt</sub> **`)`** /\* Obsolete-style declarator \*/
69-
70-
*`pointer`*:<br/>
71-
&nbsp;&nbsp;&nbsp;&nbsp;<strong>`*`</strong> *`type-qualifier-list`*<sub>opt</sub><br/>
72-
&nbsp;&nbsp;&nbsp;&nbsp;<strong>`*`</strong> *`type-qualifier-list`*<sub>opt</sub> *`pointer`*
73-
74-
*`parameter-type-list`*:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/\* The parameter list \*/<br/>
75-
&nbsp;&nbsp;&nbsp;&nbsp;*`parameter-list`*<br/>
76-
&nbsp;&nbsp;&nbsp;&nbsp;*`parameter-list`* **`, ...`**
77-
78-
*`parameter-list`*:<br/>
79-
&nbsp;&nbsp;&nbsp;&nbsp;*`parameter-declaration`*<br/>
80-
&nbsp;&nbsp;&nbsp;&nbsp;*`parameter-list`* **`,`** *`parameter-declaration`*
81-
82-
*`type-qualifier-list`*:<br/>
83-
&nbsp;&nbsp;&nbsp;&nbsp;*`type-qualifier`*<br/>
84-
&nbsp;&nbsp;&nbsp;&nbsp;*`type-qualifier-list`* *`type-qualifier`*
85-
86-
*`enum-specifier`*:<br/>
87-
&nbsp;&nbsp;&nbsp;&nbsp;**`enum`** *`identifier`*<sub>opt</sub> **`{`** *`enumerator-list`* **`}`**<br/>
88-
&nbsp;&nbsp;&nbsp;&nbsp;**`enum`** *`identifier`*
89-
90-
*`enumerator-list`*:<br/>
91-
&nbsp;&nbsp;&nbsp;&nbsp;*`enumerator`*<br/>
92-
&nbsp;&nbsp;&nbsp;&nbsp;*`enumerator-list`* **`,`** *`enumerator`*
93-
94-
*`enumerator`*:<br/>
95-
&nbsp;&nbsp;&nbsp;&nbsp;*`enumeration-constant`*<br/>
96-
&nbsp;&nbsp;&nbsp;&nbsp;*`enumeration-constant`* **`=`** *`constant-expression`*
97-
98-
*`enumeration-constant`*:<br/>
99-
&nbsp;&nbsp;&nbsp;&nbsp;*`identifier`*
100-
101-
*`struct-or-union-specifier`*:<br/>
102-
&nbsp;&nbsp;&nbsp;&nbsp;*`struct-or-union`* *`identifier`*<sub>opt</sub> **`{`** *`struct-declaration-list`* **`}`**<br/>
103-
&nbsp;&nbsp;&nbsp;&nbsp;*`struct-or-union`* *`identifier`*
104-
105-
*`struct-or-union`*:<br/>
106-
&nbsp;&nbsp;&nbsp;&nbsp;**`struct`**<br/>
107-
&nbsp;&nbsp;&nbsp;&nbsp;**`union`**
108-
109-
*`struct-declaration-list`*:<br/>
110-
&nbsp;&nbsp;&nbsp;&nbsp;*`struct-declaration`*<br/>
111-
&nbsp;&nbsp;&nbsp;&nbsp;*`struct-declaration-list`* *`struct-declaration`*
112-
113-
*`struct-declaration`*:<br/>
114-
&nbsp;&nbsp;&nbsp;&nbsp;*`specifier-qualifier-list`* *`struct-declarator-list`* **`;`**
115-
116-
*`specifier-qualifier-list`*:<br/>
117-
&nbsp;&nbsp;&nbsp;&nbsp;*`type-specifier`* *`specifier-qualifier-list`*<sub>opt</sub><br/>
118-
&nbsp;&nbsp;&nbsp;&nbsp;*`type-qualifier`* *`specifier-qualifier-list`*<sub>opt</sub>
119-
120-
*`struct-declarator-list`*:<br/>
121-
&nbsp;&nbsp;&nbsp;&nbsp;*`struct-declarator`* *`struct-declarator-list`* **`,`** *`struct-declarator`*
122-
123-
*`struct-declarator`*:<br/>
124-
&nbsp;&nbsp;&nbsp;&nbsp;*`declarator`*<br/>
125-
&nbsp;&nbsp;&nbsp;&nbsp;*`type-specifier`* *`declarator`*<sub>opt</sub> **`:`** *`constant-expression`*
126-
127-
*`parameter-declaration`*:<br/>
128-
&nbsp;&nbsp;&nbsp;&nbsp;*`declaration-specifiers`* *`declarator`* /\* Named declarator \*/<br/>
129-
&nbsp;&nbsp;&nbsp;&nbsp;*`declaration-specifiers`* *`abstract-declarator`*<sub>opt</sub> /\* Anonymous declarator \*/
130-
131-
*`identifier-list`*: /\* For old-style declarator \*/<br/>
132-
&nbsp;&nbsp;&nbsp;&nbsp;*`identifier`*<br/>
133-
&nbsp;&nbsp;&nbsp;&nbsp;*`identifier-list`* **`,`** *`identifier`*
134-
135-
*`abstract-declarator`*: /\* Used with anonymous declarators \*/<br/>
136-
&nbsp;&nbsp;&nbsp;&nbsp;*`pointer`*<br/>
137-
&nbsp;&nbsp;&nbsp;&nbsp;*`pointer`*<sub>opt</sub> *`direct-abstract-declarator`*
138-
139-
*`direct-abstract-declarator`*:<br/>
140-
&nbsp;&nbsp;&nbsp;&nbsp;**`(`** *`abstract-declarator`* **`)`**<br/>
141-
&nbsp;&nbsp;&nbsp;&nbsp;*`direct-abstract-declarator`*<sub>opt</sub> **`[`** *`constant-expression`*<sub>opt</sub> **`]`**<br/>
142-
&nbsp;&nbsp;&nbsp;&nbsp;*`direct-abstract-declarator`*<sub>opt</sub> **`(`** *`parameter-type-list`*<sub>opt</sub> **`)`**
143-
144-
*`initializer`*:<br/>
145-
&nbsp;&nbsp;&nbsp;&nbsp;*`assignment-expression`*<br/>
146-
&nbsp;&nbsp;&nbsp;&nbsp;**`{`** *`initializer-list`* **`}`** /\* For aggregate initialization \*/<br/>
147-
&nbsp;&nbsp;&nbsp;&nbsp;**`{`** *`initializer-list`* **`, }`**
148-
149-
*`initializer-list`*:<br/>
150-
&nbsp;&nbsp;&nbsp;&nbsp;*`initializer`*<br/>
151-
&nbsp;&nbsp;&nbsp;&nbsp;*`initializer-list`* **`,`** *`initializer`*
152-
153-
*`type-name`*:<br/>
154-
&nbsp;&nbsp;&nbsp;&nbsp;*`specifier-qualifier-list`* *`abstract-declarator`*<sub>opt</sub>
155-
156-
*`typedef-name`*:<br/>
157-
&nbsp;&nbsp;&nbsp;&nbsp;*`identifier`*
158-
159-
*`extended-decl-modifier-seq`*:&nbsp;&nbsp;&nbsp;&nbsp;/\* Microsoft-specific \*/<br/>
160-
&nbsp;&nbsp;&nbsp;&nbsp;*`extended-decl-modifier`*<sub>opt</sub><br/>
161-
&nbsp;&nbsp;&nbsp;&nbsp;*`extended-decl-modifier-seq`* *`extended-decl-modifier`*
162-
163-
*`extended-decl-modifier`*:&nbsp;&nbsp;&nbsp;&nbsp;/\* Microsoft-specific \*/<br/>
164-
&nbsp;&nbsp;&nbsp;&nbsp;**`thread`**<br/>
165-
&nbsp;&nbsp;&nbsp;&nbsp;**`naked`**<br/>
166-
&nbsp;&nbsp;&nbsp;&nbsp;**`dllimport`**<br/>
167-
&nbsp;&nbsp;&nbsp;&nbsp;**`dllexport`**
9+
*`declaration`*:\
10+
&emsp;*`declaration-specifiers`* *`attribute-seq`*<sub>opt</sub><sup>1</sup> *`init-declarator-list`*<sub>opt</sub> **`;`**\
11+
&emsp;*`static_assert-declaration`*
12+
13+
*`declaration-specifiers`*:\
14+
&emsp;*`storage-class-specifier`* *`declaration-specifiers`*<sub>opt</sub>\
15+
&emsp;*`type-specifier`* *`declaration-specifiers`*<sub>opt</sub>\
16+
&emsp;*`type-qualifier`* *`declaration-specifiers`*<sub>opt</sub>\
17+
&emsp;*`function-specifier`* *`declaration-specifiers`*<sub>opt</sub>\
18+
&emsp;*`alignment-specifier`* *`declaration-specifiers`*<sub>opt</sub>
19+
20+
*`attribute-seq`*<sup>1</sup>:\
21+
&emsp;*`attribute`*<sup>1</sup> *`attribute-seq`*<sub>opt</sub><sup>1</sup>
22+
23+
*`attribute`*<sup>1, 2</sup>: one of\
24+
&emsp;**`__asm`** **`__based`** **`__cdecl`** **`__clrcall`** **`__fastcall`** **`__inline`** **`__stdcall`** **`__thiscall`** **`__vectorcall`**
25+
26+
*`init-declarator-list`*:\
27+
&emsp;*`init-declarator`*\
28+
&emsp;*`init-declarator-list`* **`,`** *`init-declarator`*
29+
30+
*`init-declarator`*:\
31+
&emsp;*`declarator`*\
32+
&emsp;*`declarator`* **`=`** *`initializer`*
33+
34+
*`storage-class-specifier`*:\
35+
&emsp;**`auto`**\
36+
&emsp;**`extern`**\
37+
&emsp;**`register`**\
38+
&emsp;**`static`**\
39+
&emsp;**`_Thread_local`**\
40+
&emsp;**`typedef`**\
41+
&emsp;**`__declspec`** **`(`** *`extended-decl-modifier-seq`* **`)`**<sup>1</sup>
42+
43+
*`extended-decl-modifier-seq`*<sup>1</sup>:\
44+
&emsp;*`extended-decl-modifier`*<sub>opt</sub>\
45+
&emsp;*`extended-decl-modifier-seq`* *`extended-decl-modifier`*
46+
47+
*`extended-decl-modifier`*<sup>1</sup>:\
48+
&emsp;**`thread`**\
49+
&emsp;**`naked`**\
50+
&emsp;**`dllimport`**\
51+
&emsp;**`dllexport`**
52+
53+
*`type-specifier`*:\
54+
&emsp;**`void`**\
55+
&emsp;**`char`**\
56+
&emsp;**`short`**\
57+
&emsp;**`int`**\
58+
&emsp;**`__int8`**<sup>1</sup>\
59+
&emsp;**`__int16`**<sup>1</sup>\
60+
&emsp;**`__int32`**<sup>1</sup>\
61+
&emsp;**`__int64`**<sup>1</sup>\
62+
&emsp;**`long`**\
63+
&emsp;**`float`**\
64+
&emsp;**`double`**\
65+
&emsp;**`signed`**\
66+
&emsp;**`unsigned`**\
67+
&emsp;**`_Bool`**\
68+
&emsp;**`_Complex`**\
69+
&emsp;*`atomic-type-specifier`*\
70+
&emsp;*`struct-or-union-specifier`*\
71+
&emsp;*`enum-specifier`*\
72+
&emsp;*`typedef-name`*
73+
74+
*`struct-or-union-specifier`*:\
75+
&emsp;*`struct-or-union`* *`identifier`*<sub>opt</sub> **`{`** *`struct-declaration-list`* **`}`**\
76+
&emsp;*`struct-or-union`* *`identifier`*
77+
78+
*`struct-or-union`*:\
79+
&emsp;**`struct`**\
80+
&emsp;**`union`**
81+
82+
*`struct-declaration-list`*:\
83+
&emsp;*`struct-declaration`*\
84+
&emsp;*`struct-declaration-list`* *`struct-declaration`*
85+
86+
*`struct-declaration`*:\
87+
&emsp;*`specifier-qualifier-list`* *`struct-declarator-list`*<sub>opt</sub> **`;`**\
88+
&emsp;*`static_assert-declaration`*
89+
90+
*`specifier-qualifier-list`*:\
91+
&emsp;*`type-specifier`* *`specifier-qualifier-list`*<sub>opt</sub>\
92+
&emsp;*`type-qualifier`* *`specifier-qualifier-list`*<sub>opt</sub>\
93+
&emsp;*`alignment-specifier`* *`specifier-qualifier-list`*<sub>opt</sub>
94+
95+
*`struct-declarator-list`*:\
96+
&emsp;*`struct-declarator`*\
97+
&emsp;*`struct-declarator-list`* **`,`** *`struct-declarator`*
98+
99+
*`struct-declarator`*:\
100+
&emsp;*`declarator`*\
101+
&emsp;*`declarator`*<sub>opt</sub> **`:`** *`constant-expression`*
102+
103+
*`enum-specifier`*:\
104+
&emsp;**`enum`** *`identifier`*<sub>opt</sub> **`{`** *`enumerator-list`* **`}`**\
105+
&emsp;**`enum`** *`identifier`*<sub>opt</sub> **`{`** *`enumerator-list`* **`,`** **`}`**\
106+
&emsp;**`enum`** *`identifier`*
107+
108+
*`enumerator-list`*:\
109+
&emsp;*`enumerator`*\
110+
&emsp;*`enumerator-list`* **`,`** *`enumerator`*
111+
112+
*`enumerator`*:\
113+
&emsp;*`enumeration-constant`*\
114+
&emsp;*`enumeration-constant`* **`=`** *`constant-expression`*
115+
116+
*`atomic-type-specifier`*:\
117+
&emsp;**`_Atomic`** **`(`** *`type-name`* **`)`**
118+
119+
*`type-qualifier`*:\
120+
&emsp;**`const`**\
121+
&emsp;**`restrict`**\
122+
&emsp;**`volatile`**\
123+
&emsp;**`_Atomic`**
124+
125+
*`function-specifier`*:\
126+
&emsp;**`inline`**\
127+
&emsp;**`_Noreturn`**
128+
129+
*`alignment-specifier`*:\
130+
&emsp;**`_Alignas`** **`(`** *`type-name`* **`)`**\
131+
&emsp;**`_Alignas`** **`(`** *`constant-expression`* **`)`**
132+
133+
*`declarator`*:\
134+
&emsp;*`pointer`*<sub>opt</sub> *`direct-declarator`*
135+
136+
*`direct-declarator`*:\
137+
&emsp;*`identifier`*\
138+
&emsp;**`(`** *`declarator`* **`)`**\
139+
&emsp;*`direct-declarator`* **`[`** *`type-qualifier-list`*<sub>opt</sub> *`assignment-expression`*<sub>opt</sub> **`]`**\
140+
&emsp;*`direct-declarator`* **`[`** **`static`** *`type-qualifier-list`*<sub>opt</sub> *`assignment-expression`* **`]`**\
141+
&emsp;*`direct-declarator`* **`[`** *`type-qualifier-list`* **`static`** *`assignment-expression`* **`]`**\
142+
&emsp;*`direct-declarator`* **`[`** *`type-qualifier-list`*<sub>opt</sub> **`*`** **`]`**\
143+
&emsp;*`direct-declarator`* **`(`** *`parameter-type-list`* **`)`**\
144+
&emsp;*`direct-declarator`* **`(`** *`identifier-list`*<sub>opt</sub> **`)`**<sup>3</sup>
145+
146+
*`pointer`*:\
147+
&emsp;**`*`** *`type-qualifier-list`*<sub>opt</sub>\
148+
&emsp;**`*`** *`type-qualifier-list`*<sub>opt</sub> *`pointer`*
149+
150+
*`type-qualifier-list`*:\
151+
&emsp;*`type-qualifier`*\
152+
&emsp;*`type-qualifier-list`* *`type-qualifier`*
153+
154+
*`parameter-type-list`*:\
155+
&emsp;*`parameter-list`*\
156+
&emsp;*`parameter-list`* **`,`** **`...`**
157+
158+
*`parameter-list`*:\
159+
&emsp;*`parameter-declaration`*\
160+
&emsp;*`parameter-list`* **`,`** *`parameter-declaration`*
161+
162+
*`parameter-declaration`*:\
163+
&emsp;*`declaration-specifiers`* *`declarator`*\
164+
&emsp;*`declaration-specifiers`* *`abstract-declarator`*<sub>opt</sub>
165+
166+
*`identifier-list`*: /\* For old-style declarator \*/\
167+
&emsp;*`identifier`*\
168+
&emsp;*`identifier-list`* **`,`** *`identifier`*
169+
170+
*`type-name`*:\
171+
&emsp;*`specifier-qualifier-list`* *`abstract-declarator`*<sub>opt</sub>
172+
173+
*`abstract-declarator`*:\
174+
&emsp;*`pointer`*\
175+
&emsp;*`pointer`*<sub>opt</sub> *`direct-abstract-declarator`*
176+
177+
*`direct-abstract-declarator`*:\
178+
&emsp;**`(`** *`abstract-declarator`* **`)`**\
179+
&emsp;*`direct-abstract-declarator`* **`[`** *`type-qualifier-list`*<sub>opt</sub> *`assignment-expression`*<sub>opt</sub> **`]`**\
180+
&emsp;*`direct-abstract-declarator`* **`[`** **`static`** *`type-qualifier-list`*<sub>opt</sub> *`assignment-expression`* **`]`**\
181+
&emsp;*`direct-abstract-declarator`* **`[`** *`type-qualifier-list`* **`static`** *`assignment-expression`* **`]`**\
182+
&emsp;*`direct-abstract-declarator`* **`[`** *`type-qualifier-list`*<sub>opt</sub> **`*`** **`]`**\
183+
&emsp;*`direct-abstract-declarator`*<sub>opt</sub> **`(`** *`parameter-type-list`*<sub>opt</sub> **`)`**
184+
185+
*`typedef-name`*:\
186+
&emsp;*`identifier`*
187+
188+
*`initializer`*:\
189+
&emsp;*`assignment-expression`*\
190+
&emsp;**`{`** *`initializer-list`* **`}`**\
191+
&emsp;**`{`** *`initializer-list`* **`, }`**
192+
193+
*`initializer-list`*:\
194+
&emsp;*`designation`*<sub>opt</sub> *`initializer`*\
195+
&emsp;*`initializer-list`* **`,`** *`designation`*<sub>opt</sub> *`initializer`*
196+
197+
*`designation`*:\
198+
&emsp;*`designator-list`* **`=`**
199+
200+
*`designator-list`*:\
201+
&emsp;*`designator`*\
202+
&emsp;*`designator-list`* *`designator`*
203+
204+
*`designator`*:\
205+
&emsp;**`[`** *`constant-expression`* **`]`**\
206+
&emsp;**`.`** *`identifier`*
207+
208+
*`static_assert-declaration`*:\
209+
&emsp;**`_Static_assert`** **`(`** *`constant-expression`* **`,`** *`string-literal`* **`)`** **`;`**
210+
211+
<sup>1</sup> This grammar element is Microsoft-specific.\
212+
<sup>2</sup> For more information about these elements, see [`__asm`](../assembler/inline/asm.md), [`__clrcall`](../cpp/clrcall.md), [`__stdcall`](../cpp/stdcall.md), [`__based`](../cpp/based-grammar.md), [`__fastcall`](../cpp/fastcall.md), [`__thiscall`](../cpp/thiscall.md), [`__cdecl`](../cpp/cdecl.md), [`__inline`](../cpp/inline-functions-cpp.md), and [`__vectorcall`](../cpp/vectorcall.md).
213+
<sup>3</sup> This style is obsolete.
168214

169215
## See also
170216

171-
[Calling Conventions](../cpp/calling-conventions.md)<br/>
172-
[Phrase Structure Grammar](../c-language/phrase-structure-grammar.md)<br/>
173-
[Obsolete Calling Conventions](../cpp/obsolete-calling-conventions.md)
217+
[Calling conventions](../cpp/calling-conventions.md)\
218+
[Phrase structure grammar](./phrase-structure-grammar.md)\
219+
[Obsolete calling conventions](../cpp/obsolete-calling-conventions.md)

0 commit comments

Comments
 (0)