Punctuators and operators

A punctuator is a token that has syntactic and semantic meaning to the compiler, but the exact significance depends on the context. A punctuator can also be a token that is used in the syntax of the preprocessor.

C99 and C++ define the following tokens as punctuators, operators, or preprocessing tokens:

Table 9. C and C++ punctuators
[ ] ( ) { } , : ;
* = ... #    
. -> ++ -- ##  
& + - ~ !  
/ % << >> !=  
< > <= >= ==  
^ | && || ?  
*= /= %= += -=  
<<= >>= &= ^= |=  
C++ only

In addition to the C99 preprocessing tokens, operators, and punctuators, C++ allows the following tokens as punctuators:

Table 10. C++ punctuators
:: .* ->* new delete  
and and_eq bitand bitor comp  
not not_eq or or_eq xor xor_eq
End of C++ only

Related information

Alternative tokens

Both C and C++ provide the following alternative representations for some operators and punctuators. The alternative representations are also known as digraphs.

Operator or punctuator Alternative representation
{ <%
} %>
[ <:
] :>
# %:
## %:%:

In addition to the operators and punctuators listed above, C++ and C at the C99 language level provide the following alternative representations. In C, they are defined as macros in the header file iso646.h.

Operator or punctuator Alternative representation
&& and
| bitor
|| or
^ xor
~ compl
& bitand
&= and_eq
|= or_eq
^= xor_eq
! not
!= not_eq

Related information