假与假的区别是什么?

What is the difference between false and FALSE?

本文关键字:是什么 区别      更新时间:2023-10-16

在许多程序中,我看到带有标识符FALSEfalse的语句。它们在c++环境中有什么区别吗?

在一些程序中,我看到了boolBOOL。这两者的区别是什么?

谁能给我解释一下这些标识符的区别?谢谢。

如果包含windows.h,则FALSE的#定义为0。TRUE #定义为1。它是不是布尔类型,它是整数类型。Windows还定义了类型BOOL,它实际上是一个整数类型,旨在容纳值TRUEFALSE

windows.h中相关的代码部分看起来像这样:

#ifdef FALSE
#undef FALSE
#endif
#define FALSE 0
#ifdef TRUE
#undef TRUE
#endif
#define TRUE  1
typedef int    BOOL,    *PBOOL,    *LPBOOL;

Windows最初是用C编写的,所有最初的Windows应用程序也是如此。当时,C语言没有标准定义的布尔类型。相反,开发人员被迫定义自己的布尔常量。为了防止可能造成的混乱,微软决定为所有Windows应用程序制定一个标准。

如果你正在编写Windows应用程序,你可能仍然需要使用TRUEFALSE标识符。windows.h中定义的几个函数要么接受类型为BOOL的布尔参数(实际上是整数!),要么返回这种类型的值。c++是强类型的,如果将这些强制转换为语言标准中定义的布尔类型,可能会出现问题。为了保持一致性,我在所有对Windows API函数的调用中都使用旧的标识符,而truefalse关键字现在在我自己编写的所有方法中都由标准定义。

没有理由不使用FALSE,因为它是在windows.h中定义的。但是您不应该像其他人提到的那样,在专有的头文件中自己定义它,因为不能保证该定义随时间保持不变。这可能会导致一些非常愚蠢的错误,这些错误有资格出现在每日WTF上。

Mat的答案是100%正确的,TRUEFALSE都不是由C或c++标准定义的。但是,它们是由Windows API严格定义的,并且保证不会更改。使用它们不会产生真正跨平台的、严格符合标准的c++代码,但在编写Windows应用程序时,这很少是一个问题,因为它们也不会调用windows.h中的任何其他函数。

FALSE在标准中没有定义。只有false是。truefalse被称为"布尔字面值",是c++中的关键字。

FALSE有时被定义为宏。您不能指望它出现在符合标准的环境中,因为它不是标准的一部分。

换句话说,以下程序是有效的C++:

#include <iostream>
#define FALSE 1
int main()
{
    bool a = false;
    bool b = FALSE;
    std::cout << a << " " << b << std::endl;
    return 0;
}

,它将按预期打印0 1FALSE在任何方面都不是特权符号

在c++中,false是布尔类型的内置文字,表示false值(其他可能的值用文字true表示)

FALSE是一个#define,其定义可能取决于平台,但通常为0。

false是一个c++关键字。

FALSE在c++标准中没有定义。但是大多数编译器都将FALSE定义为预处理器宏,值为0。

记住真布尔值和假布尔值的含义。它们总是整数(0,1)编译器可能无法识别它,但它们将始终作为整数存储并在CPU中运行。调试器将显示这一点。它是否大写并不重要,因为它的实现或用法应该没有什么不同。如果你的编译器写了一些宏来支持大写和小写的true和false,那么很好,但这只是为了满足你的需要。就像其他类型一样

关于Windows API的重要注意事项:一些Windows库函数返回任意整数值,尽管返回类型定义为BOOL。最好不要将BOOLTRUE进行比较。使用

  bSomeVal != FALSE instead.