Поделиться через


Общие сведения об объявлениях

declaration:
declaration-specifiers attribute-seqнеоб.1 init-declarator-listнеоб. ;
static_assert-declaration

declaration-specifiers:
storage-class-specifier declaration-specifiersнеоб.
type-specifier declaration-specifiersнеоб.
type-qualifier declaration-specifiersнеоб.
function-specifier declaration-specifiersнеоб.
alignment-specifier declaration-specifiersнеоб.

attribute-seq1:
attribute1 attribute-seqнеоб.1

attribute1, 2: один из
__asm __based __cdecl __clrcall __fastcall __inline __stdcall __thiscall __vectorcall

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

init-declarator:
declarator
declarator = initializer

storage-class-specifier:
auto
extern
register
static
_Thread_local
typedef
__declspec ( extended-decl-modifier-seq )1

extended-decl-modifier-seq1:
extended-decl-modifierнеоб.
extended-decl-modifier-seq extended-decl-modifier

extended-decl-modifier1:
thread
naked
dllimport
dllexport

type-specifier:
void
char
short
int
__int81
__int161
__int321
__int641
long
float
double
signed
unsigned
_Bool
_Complex
atomic-type-specifier
struct-or-union-specifier
enum-specifier
typedef-name

struct-or-union-specifier:
struct-or-union identifier необ.{ 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 ;
static_assert-declaration

specifier-qualifier-list:
type-specifier specifier-qualifier-listнеоб.
type-qualifier specifier-qualifier-listнеоб.
alignment-specifier specifier-qualifier-listнеоб.

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

struct-declarator:
declarator
declaratorнеоб. : constant-expression

enum-specifier:
enum identifier необ.{ enumerator-list }
enum identifier {необ.enumerator-list , }
enum identifier

enumerator-list:
enumerator
enumerator-list , enumerator

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

atomic-type-specifier:
_Atomic ( type-name )

type-qualifier:
const
restrict
volatile
_Atomic

function-specifier:
inline
_Noreturn

alignment-specifier:
_Alignas ( type-name )
_Alignas ( constant-expression )

declarator:
pointerнеоб. direct-declarator

direct-declarator:
identifier
( declarator )
direct-declarator [ type-qualifier-listнеоб. assignment-expressionнеоб. ]
direct-declarator [ static type-qualifier-listнеоб. assignment-expression ]
direct-declarator [ type-qualifier-list static assignment-expression ]
direct-declarator [ type-qualifier-listнеоб. * ]
direct-declarator ( parameter-type-list )
direct-declarator ( identifier-listнеоб. )3

pointer:
* type-qualifier-listнеоб.
*необ.type-qualifier-list pointer

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

parameter-type-list:
parameter-list
parameter-list , ...

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

parameter-declaration:
declaration-specifiers declarator
declaration-specifiers abstract-declaratorнеоб.

identifier-list: /* Для оператора объявления старого стиля */
identifier
identifier-list , identifier

type-name:
specifier-qualifier-list abstract-declaratorнеоб.

abstract-declarator:
pointer
pointerнеоб. direct-abstract-declarator

direct-abstract-declarator:
( abstract-declarator )
direct-abstract-declarator [ type-qualifier-listнеоб. assignment-expressionнеоб. ]
direct-abstract-declarator [ static type-qualifier-listнеоб. assignment-expression ]
direct-abstract-declarator [ type-qualifier-list static assignment-expression ]
direct-abstract-declarator [ type-qualifier-listнеоб. * ]
direct-abstract-declaratorнеоб. ( parameter-type-listнеоб. )

typedef-name:
identifier

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

initializer-list:
designationнеоб. initializer
initializer-list , designationнеоб. initializer

designation:
designator-list =

designator-list:
designator
designator-list designator

designator:
[ constant-expression ]
. identifier

static_assert-declaration:
_Static_assert ( constant-expression , string-literal ) ;

1 Этот элемент грамматики используется только в системах Майкрософт.
2 Дополнительные сведения об этих элементах см. в статьях о __asm, __clrcall, __stdcall, __based, __fastcall, __thiscall, __cdecl, __inline и __vectorcall.
3 Этот стиль устарел.

См. также

Соглашения о вызовах
Грамматика структуры фразы
Устаревшие соглашения о вызовах