Declarations are constructs in a program that state that a name identifies an object, type or function, and describe that entity. Every declaration has a scope, which indicates in which lexical portion of a source file the declared name has its declared meaning.
- translation-unit
external-declarationtranslation-unit external-declaration- external-declaration
function-definitiondeclaration- declaration
declaration-specifiers init-declarator-listopt-
static_assert-declarationsince C11 - declaration-specifiers
storage-class-specifier declaration-specifiersopttype-specifier declaration-specifiersopttype-qualifier declaration-specifiersoptfunction-specifier declaration-specifiersoptalignment-specifier declaration-specifiersopt- storage-class-specifier
typedefexternstatic_Thread_local autoregister- init-declarator-list
init-declaratorinit-declarator-list , init-declarator- init-declarator
declaratordeclarator = initializer- declarator
pointeropt direct-declarator- 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 )The pre-standard way - initializer
assignment-expression{ initializer-list }-
{ initializer-list , }since C99 - initializer-list
designationopt initializerinitializer-list , designationopt initializer- designation
designator-list =- designator-list
designatordesignator-list designator- designator
-
[ constant-expression ] . identifier