Syntax
' c-char ' | (1) | |
u ' c-char ' (since C11) | (2) | |
U ' c-char ' (since C11) | (3) | |
L ' c-char ' | (4) | |
' c-char-sequence ' | (5) |
where.
- c-char is either
- a character from the basic source character set minus single-quote (
'), backslash (\), or the newline character. - escape sequence: one of special character escapes
\'\"\?\\\a\b\f\n\r\t\v, hex escapes\x...or octal escapes\...as defined in escape sequences. -
universal character name,
\u...or\U...as defined in escape sequences.(since C99) - c-char-sequence is a sequence of two or more c-chars.
1) single-byte integer character constant, e.g.'a'or'\n'or'\13'. Such constant has typeintand a value equal to the representation of c-char in the execution character set as a value of typecharmapped toint. If c-char is not representable as a single byte in the execution character set, the value is implementation-defined.2) 16-bit wide character constant, e.g.u'貓', but notu'🍌'(u'\U0001f34c'). Such constant has typechar16_tand a value equal to the value of c-char in the 16-bit encoding produced bymbrtoc16(normally UTF-16). If c-char is not representable or maps to more than one 16-bit character, the behavior is implementation-defined.3) 32-bit wide character constant, e.g.U'貓'orU'🍌'. Such constant has typechar32_tand a value equal to the value of c-char in in the 32-bit encoding produced bymbrtoc32(normally UTF-32). If c-char is not representable or maps to more than one 32-bit character, the behavior is implementation-defined.4) wide character constant, e.g.L'β'orL'貓. Such constant has typewchar_tand a value equal to the value of c-char in the execution wide character set (that is, the value that would be produced bymbtowc). If c-char is not representable or maps to more than one wide character (e.g. a non-BMP value on Windows where wchar_t is 16-bit), the behavior is implementation-defined .5) multicharacter constant, e.g.'AB', has typeintand implementation-defined value.Notes
Many implementations of multicharacter constants use the values of each char in the constant to initialize successive bytes of the resulting integer, in big-endian order, e.g. the value of
'\1\2\3\4'is0x1020304.In C++, ordinary character constants have type
char, rather thanint.Unlike integer constants, a character constant may have a negative value if
charis signed: on such implementations'\xFF'is anintwith the value-1.When used in a controlling expression of #if or #elif, character constants may be interpreted in terms of the source character set, the execution character set, or some other implementation-defined character set.
References
- C11 standard (ISO/IEC 9899:2011):
- 6.4.4.4 Character constants (p: 67-70)
- C99 standard (ISO/IEC 9899:1999):
- 6.4.4.4 Character constants (p: 59-61)
- C89/C90 standard (ISO/IEC 9899:1990):
- 3.1.3.4 Character constants
See also
C++ documentation for character literal
- a character from the basic source character set minus single-quote (
Please login to continue.