Previous | Contents | Index |
This section summarizes the syntax of the C language, using the syntax of the ANSI C Standard. Syntactic categories are indicated with bold type, and literal words or characters are indicated with monospaced, nonitalicized type. A colon following a syntactic category introduces its definition. Alternative definitions are listed on separate lines, or are prefaced by the words "one of." An optional element is indicated by the subscript opt. For example, the following line indicates an optional expression enclosed in braces:
{ expressionopt } |
The section numbers shown in parentheses refer to the section of the American National Standard for Information Systems-Programming Language C (document number: X3.159-1989) that discusses that part of the language.
token: (§3.1)
keyword |
preprocessing-token: (§3.1)
header-name |
keyword: (§3.1.1) one of
|
auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while _Bool _Complex (ALPHA ONLY) |
identifier: (§3.1.2)
identifier-nondigit |
identifier-nondigit:
nondigit |
nondigit: §3.1.2 one of
|
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ |
digit: (§3.1.2) one of
|
0 1 2 3 4 5 6 7 8 9 |
constant: (§3.1.3)
floating-constant |
floating-constant: (§3.1.3.1)
decimal-floating-constant |
decimal-floating-constant
fractional-constant exponent-partopt floating-suffixopt |
hexadecimal-floating-constant
hexadecimal-prefix hexadecimal-fractional-constant binary-exponent-part floating-suffixopt |
fractional-constant: (§3.1.3.1)
digit-sequenceopt . digit-sequence |
exponent-part: (§3.1.3.1)
e signopt digit-sequence |
sign: (§3.1.3.1) one of
+ -- |
digit-sequence: (§3.1.3.1)
digit |
hexadecimal-fractional-constant:
hexadecimal-digit-sequenceopt . hexadecimal-digit-sequence |
binary-exponent-part:
p signopt digit-sequence |
hexadecimal-digit-sequence:
hexadecimal-digit |
floating-suffix: (§3.1.3.1) one of
|
f l F L
integer-constant: (§3.1.3.2)
decimal-constant integer-suffixopt |
decimal-constant: (§3.1.3.2)
nonzero-digit |
octal-constant: (§3.1.3.2)
0 |
hexadecimal-constant: (§3.1.3.2)
0x hexadecimal-digit |
nonzero-digit: (§3.1.3.2) one of
|
1 2 3 4 5 6 7 8 9 |
octal-digit: (§3.1.3.2) one of
|
0 1 2 3 4 5 6 7 |
hexadecimal-digit: (§3.1.3.2) one of
|
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F |
integer-suffix: (§3.1.3.2)
unsigned-suffix long-suffixopt |
unsigned-suffix: (§3.1.3.2) one of
|
u U
long-suffix: (§3.1.3.2) one of
|
l L
enumeration-constant: (§3.1.3.3)
identifier |
character-constant: (§3.1.3.4)
' c-char-sequence' |
c-char-sequence: (§3.1.3.4)
c-char |
c-char: (§3.1.3.4)
any member of the source character set except |
escape-sequence: (§3.1.3.4)
simple-escape-sequence |
simple-escape-sequence: (§3.1.3.4) one of
|
\' \" \? \\ \a \b \f \n \r \t \v |
octal-escape-sequence: (§3.1.3.4)
\ octal-digit |
hexadecimal-escape-sequence:(§3.1.3.4)
\x hexadecimal-digit |
string-literal: (§3.1.4)
"s-char-sequenceopt" |
s-char-sequence: (§3.1.4)
s-char |
s-char: (§3.1.4)
any member of the source character set except |
operator: (§3.1.5) one of
|
[ ] ( ) . -> ++ -- & * + - ~ ! sizeof / % << >> < > <= >= == != ^ | && || ? : = *= /= %= += -= <<= >>= &= ^= |= , # ## |
punctuator: (§3.1.6) one of
|
[ ] ( ) { } * , : = ; ... # |
header-name: (§3.1.7)
<h-char-sequence> |
h-char-sequence: (§3.1.7)
h-char |
h-char: (§3.1.7)
any member of the source character set except |
q-char-sequence: (§3.1.7)
q-char |
q-char: (§3.1.7)
any member of the source character set except |
pp-number: (§3.1.8)
digit |
A.1.2 Phrase Structure Grammar
primary-expression: (§3.3.1)
identifier |
postfix-expression: (§3.3.2)
primary-expression |
argument-expression-list: (§3.3.2)
assignment-expression |
unary-expression: (§3.3.3)
postfix-expression |
unary-operator: (§3.3.3) one of
|
& * + - ~ ! |
cast-expression: (§3.3.4)
unary-expression |
multiplicative-expression: (§3.3.5)
cast-expression |
additive-expression: (§3.3.6)
multiplicative-expression |
shift-expression: (§3.3.7)
additive-expression |
relational-expression: (§3.3.8)
shift-expression |
equality-expression: (§3.3.9)
relational-expression |
AND-expression: (§3.3.10)
equality-expression |
exclusive-OR-expression: (§3.3.11)
AND-expression |
inclusive-OR-expression: (§3.3.12)
exclusive-OR-expression |
logical-AND-expression: (§3.3.13)
inclusive-OR-expression |
logical-OR-expression: (§3.3.14)
logical-AND-expression |
conditional-expression: (§3.3.15)
logical-OR-expression |
assignment-expression: (§3.3.16)
conditional-expression |
assignment-operator: (§3.3.16) one of
|
= *= /= %= += -= <<= >>= &= ^= |= |
expression: (§3.3.17)
assignment-expression |
constant-expression: (§3.4)
conditional-expression |
declaration: (§3.5)
declaration-specifiers init-declarator-listopt ; |
declaration-specifiers: (§3.5)
storage-class-specifier declaration-specifiersopt |
init-declarator-list: (§3.5)
init-declarator |
init-declarator: (§3.5)
declarator |
storage-class-specifier: (§3.5.1)
typedef |
type-specifier: (§3.5.2)
void |
struct-or-union-specifier |
struct-or-union-specifier: (§3.5.2.1)
struct-or-union identifieropt { struct-declaration-list } |
struct-or-union: (§3.5.2.1)
struct |
struct-declaration-list: (§3.5.2.1)
struct-declaration |
struct-declaration: (§3.5.2.1)
specifier-qualifier-list struct-declarator-list ; |
Previous | Next | Contents | Index |