Я обнаружил, что стандарт C (C99 и C11) неопределен относительно положений символьного/строкового кода и правил кодирования:
Во-первых, стандарт определяет the source character set
и the execution character set
.
По сути, он предоставляет набор глифов, но не связывает никаких числовых значений
с ними - Итак, что такое набор символов по умолчанию?
Я не спрашиваю о кодировке здесь, а просто глиф/репертуар для отображения числовых/кодовых точек.
Он определяет universal character names
как ISO/IEC 10646, но говорит ли он, что
это кодировка по умолчанию?
Как дополнение к вышеизложенному - я не мог найти ничего, что говорит о том, какие символы числовые escape-последовательности\0 и \x представляют.
Из стандартов C (C99 и C11, я не проверял ANSI C), я получил следующее о символьных и строковых литералах:
+---------+-----+------------+----------------------------------------------+
| Literal | Std | Type | Meaning |
+---------+-----+------------+----------------------------------------------+
| '...' | C99 | int | An integer character constant is a sequence |
| | | | of one or more multibyte characters |
| L'...' | C99 | wchar_t | A wide character constant is a sequence of |
| | | | one or more multibyte characters |
| u'...' | C11 | char16_t | A wide character constant is a sequence of |
| | | | one or more multibyte characters |
| U'...' | C11 | char32_t | A wide character constant is a sequence of |
| | | | one or more multibyte characters |
| "..." | C99 | char[] | A character string literal is a sequence of |
| | | | zero or more multibyte characters |
| L"..." | C99 | wchar_t[] | A wide string literal is a sequence of zero |
| | | | or more multibyte characters |
| u8"..." | C11 | char[] | A UTF-8 string literal is a sequence of zero |
| | | | or more multibyte characters |
| u"..." | C11 | char16_t[] | A wide string literal is a sequence of zero |
| | | | or more multibyte characters |
| U"..." | C11 | char32_t[] | A wide string literal is a sequence of zero |
| | | | or more multibyte characters |
+---------+-----+------------+----------------------------------------------+
Однако я не мог найти ничего о правилах кодирования для этих литералов. UTF-8, похоже, подсказывает кодировку UTF-8, но я не думаю, что это явно упоминалось в любом месте. Кроме того, для других типов кодировка undefined или зависимая от реализации?
Я не знаком с спецификацией UNIX. Указывает ли спецификация UNIX какие-либо дополнительные ограничения для этих правил?
Также, если кто-нибудь может сказать мне , какая схема кодировки/кодирования используется GCC и MSVC, которая также поможет.