酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Objective-Cで使えるBOOL型(YES/NO)とBoolean型(TRUE/FALSE)の違い

本記事は「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のエイリアスみたいなことはなく別物でした。型と値を見ている限りは動作に問題なさそうだけど、正しい組み合わせで使いたいですね。おわり。