C.4 Declarators

declarator-list:
init-declarator
declarator-list
, init-declarator

init-declarator:
ms-modifier-list
opt declarator initializeropt

declarator:
dname
ptr-operator declarator
declarator
( argument-declaration-list ) cv-mod-listopt
declarator
[ constant-expressionopt ]
( declarator )

cv-mod-list:
cv-qualifier cv-mod-list
opt
rmodel cv-mod-list
opt

ptr-operator: ms-modifier-listopt * cv-qualifier-listopt ms-modifier-listopt & cv-qualifier-listopt ms-modifier-listopt complete-class-name : : * cv-qualifier-listopt

cv-qualifier-list:
cv-qualifier cv-qualifier-list
opt

cv-qualifier:
const
volatile

dname:
name
class-name
~ class-name
typedef-name
qualified-type-name

type-name:
type-specifier-list ms-modifier-list
opt abstract-declaratoropt

type-specifier-list:
type-specifier type-specifier-list
opt

abstract-declarator: ptr-operator ms-modifier-listopt abstract-declaratoropt abstract-declaratoropt ( argument-declaration-list ) cv-qualifier-listopt abstract-declaratoropt [ constant-expressionopt ] ( ms-modifier-listopt abstract-declarator )

argument-declaration-list:
arg-declaration-list
opt . . .opt
arg-declaration-list
, . . .

arg-declaration-list:
argument-declaration
arg-declaration-list
, argument-declarationargument-declaration:
decl-specifiers ms-modifier-list
opt declarator
decl-specifiers ms-modifier-list
opt declarator = expression
decl-specifiers ms-modifier-list
opt abstract-declaratoropt
decl-specifiers ms-modifier-list
opt abstract-declaratoropt = expression

function-definition:
decl-specifiers
opt ms-modifier-listopt declarator ctor-initializeropt fct-body

fct-body:
compound-statement

initializer:
= expression
= { initializer-list ,opt }
(
expression-list )

initializer-list:
expression
initializer-list
, expression
{ initializer-list ,opt }