false和FALSE有什么区别?

| 在许多程序中,我看到带有标识符“ 0”和“ 1”的语句。它们在C ++上下文中有什么区别吗? 同样在某些程序中,我看到了
bool
和某个地方
BOOL
。两者之间有什么区别? 谁能向我解释这些标识符之间的区别?谢谢。     
已邀请:
如果包含
windows.h
,则
FALSE
被#定义为0。
TRUE
被#定义为1。它不是布尔类型,而是整数类型。 Windows还定义了类型
BOOL
,它实际上是一个整数类型,旨在容纳值
TRUE
FALSE
windows.h
中相关代码的部分如下所示:
#ifdef FALSE
#undef FALSE
#endif
#define FALSE 0

#ifdef TRUE
#undef TRUE
#endif
#define TRUE  1

typedef int    BOOL,    *PBOOL,    *LPBOOL;
Windows和所有原始Windows应用程序一样,最初都是用C编写的。当时,C没有标准定义的布尔类型。相反,开发人员被迫定义自己的布尔常量。为了防止可能造成的混乱,Microsoft决定了将用于所有Windows应用程序的标准。 如果您正在编写Windows应用程序,则可能仍需要使用
TRUE
FALSE
标识符。
windows.h
中定义的几个函数要么接受类型为
BOOL
的布尔参数(实际上是整数!),要么返回这种类型的值。如果强制将C ++强制为语言标准中定义的布尔类型,则可能会抱怨。为了保持一致性,我在所有对Windows API函数的调用中都使用了旧的标识符,并且在我自己编写的所有方法中,现在都由标准定义了
true
false
关键字。 确实没有理由不使用
windows.h
中定义的
FALSE
。但是,您不应像其他人所提到的那样,在专有的头文件中自己定义它,因为不能保证该定义会随着时间的推移保持不变。这可能会导致一些非常愚蠢的错误,这种错误有资格出现在Daily WTF中。 Mat的答案是100%正确的,因为C或C ++标准都没有定义
TRUE
FALSE
。但是,它们由Windows API严格定义,并保证不会更改。使用它们不会产生真正的跨平台,严格符合标准的C ++代码,但这在编写Windows应用程序时很少担心,因为在
windows.h
中调用任何其他函数都不会。     

bab

标准中未定义“ 0”。只有
false
true
false
被称为\“布尔文字\”,并且是C ++中的关键字。 有时将“ 0”定义为宏。您不能依靠它存在于符合标准的环境中,因为它不是标准的一部分。 换句话说,以下程序是有效的“ 28”:
#include <iostream>

#define FALSE 1

int main()
{
    bool a = false;
    bool b = FALSE;
    std::cout << a << \" \" << b << std::endl;
    return 0;
}
它将按预期打印
0 1
FALSE
绝对不是特权符号。     
在C ++中,false是布尔类型的内置文字,它表示false值(另一个可能的值用文字true表示) FALSE是#define,其定义可能取决于平台,但通常为0。     
false
是C ++关键字。 C ++标准未定义FALSE。但是大多数编译器都将FALSE定义为值为0的预处理器宏。     
只要记住真正的布尔值和错误的布尔值总是意味着什么。它们将始终是整数(0,1)。编译器可能无法识别它,但是它们将始终作为整数存储并在CPU中运行。调试器将显示此信息。它是否大写并不重要,因为它的实现或用法应该没有什么不同。如果您的编译器编写了一些宏来支持大小写的true和false,那么宏很好,但它只满足您的需求。就像所有其他类型一样。     
关于Windows API的重要说明:尽管返回类型定义为“ 3”,但某些WIndows库函数返回任意整数值。最好不要将
BOOL
TRUE
进行比较。采用
  bSomeVal != FALSE instead.
    

要回复问题请先登录注册