Declarations

declaration : declaration-specifiers init-declarator-list opt ;

declaration-specifiers :
storage-class-specifier declaration-specifiers opt
type-specifier declaration-specifiers opt
type-qualifier declaration-specifiers opt
attributes opt declaration-specifiers opt /* Microsoft Specific */

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

init-declarator :
declarator
declarator
= initializer /* For scalar initialization */

storage-class-specifier :
auto
register
static
extern
typedef
type-specifier :
void
char
short
int
long
float
double
signed
unsigned

struct-or-union-specifier
enum-specifier
typedef-name

type-qualifier :
const
volatile

declarator : pointer opt direct-declarator

direct-declarator :
identifier
( declarator )
direct-declarator [ constant-expression opt]
direct-declarator ( parameter-type-list ) /* New-style declarator */
direct-declarator ( identifier-list opt ) /* Obsolete-style declarator */

pointer :
* type-qualifier-list opt
* type-qualifier-list opt pointer

parameter-type-list : /* The parameter list */
parameter-list
parameter-list
, ...

parameter-list :
parameter-declaration
parameter-list
, parameter-declaration

type-qualifier-list :
type-qualifier
type-qualifier-list type-qualifier

enum-specifier :
enum identifier opt { enumerator-list }
enum identifier

enumerator-list :
enumerator
enumerator-list
, enumerator

enumerator :
enumeration-constant
enumeration-constant
= constant-expression

enumeration-constant : identifier

struct-or-union-specifier :
struct-or-union identifier opt { struct-declaration-list }
struct-or-union identifier

struct-or-union :
struct
union

struct-declaration-list :
struct-declaration
struct-declaration-list struct-declaration

struct-declaration : specifier-qualifier-list struct-declarator-list ;

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

struct-declarator-list :
struct-declarator
struct-declarator-list
, struct-declarator

struct-declarator :
declarator
type-specifier declarator
opt : constant-expression

parameter-declaration :
declaration-specifiers declarator /* Named declarator */
declaration-specifiers abstract-declarator opt /* Anonymous declarator */

identifier-list : /* For old-style declarator */
identifier
identifier-list
, identifier

abstract-declarator : /* Used with anonymous declarators */
pointer
pointer opt direct-abstract-declarator

direct-abstract-declarator :
( abstract-declarator )
direct-abstract-declarator opt [ constant-expression opt ]
direct-abstract-declarator opt ( parameter-type-list opt )

initializer :
assignment-expression
{ initializer-list } /* For aggregate initialization */
{ initializer-list , }

initializer-list :
initializer
initializer-list , initializer

type-name : specifier-qualifier-list abstract-declarator opt

typedef-name : identifier