Обновление: Теперь мне сообщили, что OP хочет компилировать для C, а не C ++, и поэтому добавил соответствующий языковой тег к вопросу.
Типы в ответе ниже также доступны в C11 и далее, поэтому остальная часть этого ответа остается в силе.
Попробуйте изменить тип UTF16 на char16_t . Это работает для меня.
Для UTF32 будет работать char32_t
или wchar_t
.
Обратите внимание, что при назначении переменных из строковых литералов типы строковых литералов должны совпадать, например, (для этого кода требуется C11 / C ++ 11 или более поздняя версия):
int main ()
{
const char16_t *s1 = u"s1 is char16_t";
const char32_t *s2 = U"s2 is char32_t";
const wchar_t *s3 = L"s3 is wchar_t";
return 0;
}
И когда я ставлю точку останова в операторе return и печатаю эти переменные в консоли, я получаю следующее:
(lldb) p s1
(const char16_t *) $0 = 0x0000000100000f44 u"s1 is char16_t"
(lldb) p s2
(const char32_t *) $1 = 0x0000000100000f58 U"s2 is char32_t"
(lldb) p s3
(const wchar_t *) $2 = 0x0000000100000f7c L"s3 is wchar_t"
(lldb)
Вы также можете увидеть их, наведя на них курсор мыши или в окне «Местные жители».
Полный набор строковых литералов, доступных в C11 / C ++ 11, описан здесь (C) и здесь (C ++).
Чтобы ответить на вопрос, который вы задаете в комментариях, заголовочный файл не требуется. Это все встроенные типы. Если ваш компилятор возражает против этого, пожалуйста, проверьте версию C / C ++, которую вы используете в настройках сборки для вашего проекта в XCode.