A.2.2 Declarations

(6.7)

declaration:

declaration-specifiers init-declarator-listopt ;

(6.7)

declaration-specifiers:

storage-class-specifier declaration-specifiersopt

type-specifier declaration-specifiersopt

type-qualifier declaration-specifiersopt

function-specifier declaration-specifiersopt

(6.7)

init-declarator-list:

init-declarator

init-declarator-list , init-declarator

(6.7)

init-declarator:

declarator

declarator = initializer

(6.7.1)

storage-class-specifier:

typedef

extern

static

auto

register

(6.7.2)

type-specifier:

void

char

short

int

long

float

double

signed

unsigned

_Bool

_Complex

struct-or-union-specifier *

enum-specifier

typedef-name

(6.7.2.1)

struct-or-union-specifier:

struct-or-union identifieropt { struct-declaration-list }

struct-or-union identifier

(6.7.2.1)

struct-or-union:

struct

union

(6.7.2.1)

struct-declaration-list:

struct-declaration

struct-declaration-list struct-declaration

(6.7.2.1)

struct-declaration:

specifier-qualifier-list struct-declarator-list ;

(6.7.2.1)

specifier-qualifier-list:

type-specifier specifier-qualifier-listopt

type-qualifier specifier-qualifier-listopt

(6.7.2.1)

struct-declarator-list:

struct-declarator

struct-declarator-list , struct-declarator

(6.7.2.1)

struct-declarator:

declarator

declaratoropt : constant-expression

(6.7.2.2)

enum-specifier:

enum identifieropt { enumerator-list }

enum identifieropt { enumerator-list , }

enum identifier

(6.7.2.2)

enumerator-list:

enumerator

enumerator-list , enumerator

(6.7.2.2)

enumerator:

enumeration-constant

enumeration-constant = constant-expression

(6.7.3)

type-qualifier:

const

restrict

volatile

(6.7.4)

function-specifier:

inline

(6.7.5)

declarator:

pointeropt direct-declarator

(6.7.5)

direct-declarator:

identifier

( declarator )

direct-declarator [ type-qualifier-listopt assignment-expressionopt ]

direct-declarator [ static type-qualifier-listopt assignment-expression ]

direct-declarator [ type-qualifier-list static assignment-expression ]

direct-declarator [ type-qualifier-listopt * ]

direct-declarator ( parameter-type-list )

direct-declarator ( identifier-listopt )

(6.7.5)

pointer:

* type-qualifier-listopt

* type-qualifier-listopt pointer

(6.7.5)

type-qualifier-list:

type-qualifier

type-qualifier-list type-qualifier

(6.7.5)

parameter-type-list:

parameter-list

parameter-list , ...

(6.7.5)

parameter-list:

parameter-declaration

parameter-list , parameter-declaration

(6.7.5)

parameter-declaration:

declaration-specifiers declarator

declaration-specifiers abstract-declaratoropt

(6.7.5)

identifier-list:

identifier

identifier-list , identifier

(6.7.6)

type-name:

specifier-qualifier-list abstract-declaratoropt

(6.7.6)

abstract-declarator:

pointer

pointeropt direct-abstract-declarator

(6.7.6)

direct-abstract-declarator:

( abstract-declarator )

direct-abstract-declaratoropt [ type-qualifier-listopt

assignment-expressionopt ]

direct-abstract-declaratoropt [ static type-qualifier-listopt

assignment-expression ]

direct-abstract-declaratoropt [ type-qualifier-list static

assignment-expression ]

direct-abstract-declaratoropt [ * ]

direct-abstract-declaratoropt ( parameter-type-listopt )

(6.7.7)

typedef-name:

identifier

(6.7.8)

initializer:

assignment-expression

{ initializer-list }

{ initializer-list , }

(6.7.8)

initializer-list:

designationopt initializer

initializer-list , designationopt initializer

(6.7.8)

designation:

designator-list =

(6.7.8)

designator-list:

designator

designator-list designator

(6.7.8)

designator:

[ constant-expression ]

. identifier