本記事は「Objective-CでのBOOL型(YES/NO)とBoolean型(TRUE/FALSE)の違い - iOSアプリ開発の逆引き辞典」に転記しました。
ソースコード一式にBOOL型変数とTRUE/FALSEの組み合わせで使われており、ひどく違和感を覚えたのでどこで定義されているものなのか調べてみました。
BOOL
objc.hにて定義されています。
typedef signed char BOOL; // BOOL is explicitly signed so @encode(BOOL) == "c" rather than "C" // even if -funsigned-char is used. #define OBJC_BOOL_DEFINED #define YES (BOOL)1 #define NO (BOOL)0
Boolean
CFBase.hにて定義されています。
typedef unsigned char Boolean;
#if !defined(TRUE) #define TRUE 1 #endif #if !defined(FALSE) #define FALSE 0 #endif
結論
C#における、boolがSystem.Booleanのエイリアスみたいなことはなく別物でした。型と値を見ている限りは動作に問題なさそうだけど、正しい組み合わせで使いたいですね。おわり。