Character literals are a special type of integer literals that are used to represent one character. They are enclosed in single quotes, e.g. 'a'
and have the type int
. The value of the literal is an integer value according to the machine's character set. They do not allow suffixes.
The L
prefix before a character literal makes it a wide character of type wchar_t
. Likewise since C11 u
and U
prefixes make it wide characters of type char16_t
and char32_t
, respectively.
When intending to represent certain special characters, such as a character that is non-printing, escape sequences are used. Escape sequences use a sequence of characters that are translated into another character. All escape sequences consist of two or more characters, the first of which is a backslash \
. The characters immediately following the backslash determine what character literal the sequence is interpreted as.
Escape Sequence | Represented Character |
---|---|
\b | Backspace |
\f | Form feed |
\n | Line feed (new line) |
\r | Carriage return |
\t | Horizontal tab |
\v | Vertical tab |
\\ | Backslash |
\' | Single quotation mark |
\" | Double quotation mark |
\? | Question mark |
\nnn | Octal value |
\xnn ... | Hexadecimal value |
Escape Sequence | Represented Character |
---|---|
\a | Alert (beep, bell) |
Escape Sequence | Represented Character |
---|---|
\unnnn | Universal character name |
\Unnnnnnnn | Universal character name |
A universal character name is a Unicode code point. A universal character name may map to more than one character. The digits n
are interpreted as hexadecimal digits. Depending on the UTF encoding in use, a universal character name sequence may result in a code point that consists of multiple characters, instead of a single normal char
character.
When using the line feed escape sequence in text mode I/O, it is converted to the OS-specific newline byte or byte sequence.
The question mark escape sequence is used to avoid trigraphs. For example, ??/
is compiled as the trigraph representing a backslash character '\'
, but using ?\?/
would result in the string "??/"
.
There may be one, two or three octal numerals n
in the octal value escape sequence.