C.3 Declarations

declaration:
decl-specifiers
opt declarator-listopt ;
asm-declaration
function-definition
template-declaration
linkage-specification

decl-specifier:
storage-class-specifier
type-specifier
fct-specifier
friend
typedef

decl-specifiers:
decl-specifiers
opt decl-specifier

storage-class-specifier:
auto
register
static
extern

fct-specifier:
inline
virtual

type-specifier:
simple-type-name
class-specifier
enum-specifier
elaborated-type-specifier
const
volatile

simple-type-name:
complete-class-name
qualified-type-name
char
short
int
long
signed
unsigned
float
double
void
__segment

elaborated-type-specifier:
class-key rmodel
opt identifier
class-key rmodel
opt class-name
enum-name

class-key:
class
struct
union

qualified-type-name:
typedef-name
class-name
: : qualified-type-name

complete-class-name:
qualified-class-name
: : qualified-class-name

qualified-class-name:
class-name
class-name
: : qualified-class-name

enum-specifier:
enum identifieropt { enum-listopt }

enum-list:
enumerator
enum-list
, enumerator

enumerator:
identifier
identifier
= constant-expression

constant-expression:
conditional-expression


linkage-specification:
extern string-literal { declaration-listopt }
extern string-literal declaration

declaration-list:
declaration
declaration-list declaration