5.6 Operators and Punctuation

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.