Here we describe the lexical syntax of operators and punctuation in C. The specific operators of C and their meanings are presented in subsequent chapters.
Some characters that are generally considered punctuation have a different sort of meaning in the C language. C uses double-quote ‘"’ to delimit string constants (see String Constants) and ‘'’ to delimit character constants (see String Constants). The characters ‘$’ and ‘_’ can be part of an identifier or a keyword.
Most operators in C consist of one or two characters that can’t be used in identifiers. The characters used for such operators in C are ‘!~^&|*/%+-=<>,.?:’. (C preprocessing uses preprocessing operators, based on ‘#’, which are entirely different from these operators; Preprocessing.)
Some operators are a single character. For instance, ‘-’ is the operator for negation (with one operand) and the operator for subtraction (with two operands).
Some operators are two characters. For example, ‘++’ is the increment operator. Recognition of multicharacter operators works by reading and grouping as many successive characters as can constitute one operator, and making them one token.
For instance, the character sequence ‘++’ is always interpreted
as the increment operator; therefore, if we want to write two
consecutive instances of the operator ‘+’, we must separate them
with a space so that they do not combine as one token. Applying the
same rule, a+++++b
is always tokenized as a++ ++ + b
, not as a++ + ++b
, even though the latter could be part
of a valid C program and the former could not (since a++
is not an lvalue and thus can’t be the operand of ++
).
A few C operators are keywords rather than special characters. They
include sizeof
(see Type Size) and _Alignof
(see Type Alignment).
The characters ‘;{}[]()’ are used for punctuation and grouping. Semicolon (‘;’) ends a statement. Braces (‘{’ and ‘}’) begin and end a block at the statement level (see Blocks), and surround the initializer (see Initializers) for a variable with multiple elements or fields (such as arrays or structures).
Square brackets (‘[’ and ‘]’) do array indexing, as in
array[5]
.
Parentheses are used in expressions for explicit nesting of
expressions (see Basic Arithmetic), around the parameter
declarations in a function declaration or definition, and around the
arguments in a function call, as in printf ("Foo %d\n", i)
(see Function Calls). Several kinds of statements also use
parentheses as part of their syntax—for instance, if
statements, for
statements, while
statements, and
switch
statements. See if
Statement, and following
sections.
Parentheses are also required around the operand of the operator
keywords sizeof
and _Alignof
when the operand is a data
type rather than a value. See Type Size.