微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

false和FALSE有什么区别?

如何解决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
中调用任何其他函数都不会。     ,标准中未定义“ 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.
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。