web-dev-qa-db-ja.com

BOOLとboolの違いは何ですか?

VC++では、TRUEまたはFALSEの値を想定できるデータ型「BOOL」と、trueまたはfalseの値を想定できるデータ型「bool」があります。

それらの違いは何ですか?各データ型をいつ使用する必要がありますか?

35
Umesha MS

boolは組み込みのC++型であり、BOOLintとして定義されるMicrosoft固有の型です。 windef.hにあります。

typedef int                 BOOL;

#ifndef FALSE
#define FALSE               0
#endif

#ifndef TRUE
#define TRUE                1
#endif

boolの値はtruefalseですが、BOOLの場合はintの値を使用できますが、TRUEおよびFALSEマクロはwindef.hヘッダーで定義されています。

これは、sizeof演算子はboolに対して1(ただし、boolのサイズは実装定義であると規定されている)、およびBOOL

出典: Codeguruの記事

42
luvieere

Windows APIは、boolがC++にスローされる前はこのタイプでした。そして、それがBOOLを取るすべてのWindows関数でまだ存在する理由です。 Cはboolデータ型をサポートしていないため、BOOLを使用する必要があります。

15
Ajay

Luvieereが言ったことに追加するには、TRUEを返す関数からFALSEまたはBOOL以外のものを返すことができます。たとえば、

BOOL myFunc(int a)
{
    if (a < 3) return FALSE;
    else if (a > 3) return TRUE;
    else return 2;
}

BOOLは本質的にintであるため、これは可能です。

これはコードの一般的な可読性を大幅に損なうためお勧めできませんが、これはあなたが遭遇する可能性のあるものであり、なぜそうなのか疑問に思われることに注意してください。

11
Aamir