これはrelated questionを読みましたが、それは私にはあまり役立ちません。xcode ENUM UTF8リテラル文字を使用して
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
};
ありがとうございます。
列挙型の中に特定のマルチバイトシーケンスを格納しようとするのは悪い考えです。最低でも、エンディアンの懸念があります。 –
エンディアンはすでに考慮されているため、問題は発生しません。 –