- translation-unit
external-declarationtranslation-unit external-declaration- external-declaration
function-definitiondeclaration- function-definition
declaration-specifiers declarator compound-statement-
declaration-specifiers declarator declaration-list compound-statementThe pre-standard way - declaration-list
declarationdeclaration-list declaration- 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- init-declarator-list
init-declaratorinit-declarator-list , init-declarator- init-declarator
declaratordeclarator = initializer- storage-class-specifier
typedefexternstatic_Thread_local autoregister- type-specifier
voidcharshortintlongfloatdoublesignedunsigned-
_Boolsince C99 -
_Complexsince C99 -
_Imaginarysince C99 -
atomic-type-specifiersince C11 struct-or-union-specifierenum-specifiertypedef-name- struct-or-union-specifier
struct-or-union identifieropt { struct-declaration-list }struct-or-union identifier- struct-or-union
structunion- struct-declaration-list
struct-declarationstruct-declaration-list struct-declaration- struct-declaration
specifier-qualifier-list struct-declarator-listopt ;-
static_assert-declarationsince C11 - specifier-qualifier-list
type-specifier specifier-qualifier-listopttype-qualifier specifier-qualifier-listopt- struct-declarator-list
struct-declaratorstruct-declarator-list struct-declarator- struct-declarator
declaratordeclaratoropt : constant-expression- enum-specifier
enum identifieropt { enumerator-list }-
enum identifieropt { enumerator-list , }since C99 enum identifier- enumerator-list
enumeratorenumerator-list , enumerator- enumerator
enumeration-constantenumeration-constant = constant-expression- atomic-type-specifier
_Atomic ( type-name )- type-qualifier
constrestrictvolatile_Atomic- function-specifier
inline_Noreturn- alignment-specifier
_Alignas ( type-name )_Alignas ( constant-expression )- 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 - pointer
* type-qualifier-listopt* type-qualifier-listopt pointer- type-qualifier-list
type-qualifiertype-qualifier-list type-qualifier- parameter-type-list
parameter-listparameter-list , ...- parameter-list
parameter-declarationparameter-list , parameter-declaration- parameter-declaration
declaration-specifiers declaratordeclaration-specifiers abstract-declaratoropt- identifier-list
identifieridentifier-list , identifier- type-name
specifier-qualifier-list abstract-declaratoropt- abstract-declarator
pointerpointeropt direct-abstract-declarator- 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 )- typedef-name
identifier- initializer
assignment-expression{ initializer-list }-
{ initializer-list , }since C99 - initializer-list
designationopt initializerinitializer-list , designationopt initializer- designation
designator-list =- designator
-
[ constant-expression ] . identifier- static_assert-declaration
_Static_assert ( constant-expression , string-literal ) ;- statement
goto-labelled-statementswitch-labelled-statementcompound-statementnull-statementexpression-statementselection-statementiteration-statementjump-statement- switch-labelled-statement
case constant-expression : statementdefault : statement- goto-labelled-statement
identifier : statement- compound-statement
-
{ block-item-list }since C99 -
{ declarationsopt statementsopt }until C99 - block-item-list
block-itemblock-item-list block-item- block-item
declarationstatement- expression-statement
expression ;- selection-statement
if ( expression ) statementif ( expression ) statement else statementswitch ( expression ) statement- iteration-statement
while ( expression ) statementdo statement while ( expression ) ;for ( expressionopt ; expressionopt ; expressionopt ) statement-
for ( declaration expressionopt ; expressionopt ) statementsince C99 - jump-statement
goto identifier ;continue ;break ;return expressionopt ;- expression
assignment-expressionexpression , assignment-expression- assignment-expression
conditional-expressionunary-expression assignment-operator assignment-expression- assignment-operator
=*=/=%=+=-=<<=>>=&=^=|=- conditional-expression
logical-OR-expressionlogical-OR-expression ? expression : conditional-expression- logical-OR-expression
logical-AND-expressionlogical-OR-expression || logical-AND-expression- logical-AND-expression
inclusive-OR-expressionlogical-AND-expression && inclusive-OR-expression- inclusive-OR-expression
exclusive-OR-expressioninclusive-OR-expression | exclusive-OR-expression- exclusive-OR-expression
AND-expressionexclusive-OR-expression ^ AND-expression- AND-expression
equality-expressionAND-expression & equality-expression- equality-expression
relational-expressionequality-expression == relational-expressionequality-expression != relational-expression- relational-expression
shift-expressionrelational-expression < shift-expressionrelational-expression > shift-expressionrelational-expression <= shift-expressionrelational-expression >= shift-expression- shift-expression
additive-expressionshift-expression << additive-expressionshift-expression >> additive-expression- additive-expression
multiplicative-expressionadditive-expression + multiplicative-expressionadditive-expression - multiplicative-expression- multiplicative-expression
cast-expressionmultiplicative-expression * cast-expressionmultiplicative-expression / cast-expressionmultiplicative-expression % cast-expression- cast-expression
unary-expression( type-name ) cast-expression- unary-expression
postfix-expression-
++ unary-expression -
-- unary-expression unary-operator cast-expressionsizeof unary-expressionsizeof ( type-name )_Alignof ( type-name )- unary-operator
&*+-~!- postfix-expression
primary-expression-
postfix-expression [ expression ] -
postfix-expression ( argument-expression-listopt ) -
postfix-expression . identifierStructures and Unions -
postfix-expression -> identifierStructures and Unions -
postfix-expression ++ -
postfix-expression -- -
( type-name ) { initializer-list }since C99; Structures -
( type-name ) { initializer-list , }since C99; Structures - primary-expression
identifierconstantstring-literal( expression )-
generic-selectionsince C11