読者です 読者をやめる 読者になる 読者になる

iOSアプリ開発の逆引き辞典

iPhone/iPadで使えるアプリ開発のTipsをまとめてみました

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

Objective-Cによって提供されるintfloatなどの基本的なデータ型をプリミティブ型と呼びます。

真偽を表す型としてObjective-CにはBOOL型とBoolean型が用意されています。稀に同一ソースコード内で入り乱れて使われていることがあります。ひどく違和感を覚えたので、どのヘッダーファイルでどのように定義されているか調べてみました。

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;

TRUEFALSEは少し離れたところに以下のように定義されています。

#if !defined(TRUE)
    #define TRUE   1
#endif

#if !defined(FALSE)
    #define FALSE  0
#endif

まとめ

型と値を見ている限りは動作に問題なさそうですが、正しい組み合わせで使いたいですね。