2
我已閱讀此related question,但它不完全幫助我。使用UTF8文字字符xcode ENUM
Enum的目標是包含4個字節範圍內的單個UTF-8字符的原始UTF-8代碼(而不是unicode代碼點)。
以下示例可用,因爲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
};
謝謝;
嘗試在枚舉中包含特定的多字節序列是一個壞主意。至少,你會有endian問題 – 2012-02-17 23:33:53
已經考慮到了字節順序,所以這不會是一個問題。 – 2012-02-18 02:30:25