Я прочитал этот связанный вопрос , но он не совсем мне помогает.
Цель Enum - содержать необработанный код UTF-8 (а не кодовую точку Unicode)одиночных символов UTF-8 в диапазоне 4 байта.
Следующий пример работает, потому что исходный файл xcode имеет формат UTF-8 (который является рекомендуемой кодировкой для xcode).Он компилируется и работает с правильными ожидаемыми значениями.Но я также получаю предупреждение "символьная константа слишком длинная для этого типа" .Могу ли я подавить это? .. или плохая идея?
typedef enum {
TEST_VAL_1BYTE = ',', // 0x2C
TEST_VAL_2BYTE = '§', // 0xC2A7 (the warning)
TEST_VAL_3BYTE = '✓', // 0xE29C93 (the warning)
TEST_VAL_4BYTE = '?', // 0xF09D8DA5 (the warning)
} TEST_VALUES_UTF8;
Самый безопасный способ и без предупреждений, но более утомительно кодировать:
typedef enum {
NUM_VAL_1BYTE = 0x2C, // ,
NUM_VAL_2BYTE = 0xC2A7, // §
NUM_VAL_3BYTE = 0xE29C93, // ✓
NUM_VAL_4BYTE = 0xF09D8DA5, // ?
} TEST_VALUES_UTF8;
Наконец, обратите внимание, что перечисление с 1или 4 символа ASCII действительны и без предупреждений:
enum {
ENUM_TEST_1 = '1', // 0x31 (no warning)
ENUM_TEST_12 = '12', // 0x3132 (w: multi-character character constant)
ENUM_TEST_123 = '123', // 0x313233 (w: multi-character character constant)
ENUM_TEST_1234 = '1234', // 0x31323334 (no warning)
};
Возможно, существует макрос препроцессора, который является исходной кодировкой, которая может возвращать код UTF-8:
enum {
TEST_VAL_2BYTE = AWESOME_UTF8CODE_MACRO('§'), // 0xC2A7
};
Спасибо;