false和FALSE有什么区别?

在许多程序中,我看到标识符为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定义的。 但是,正如其他人所说的那样,您不应该自己在私有头文件中定义它,因为不能保证定义将随着时间的推移保持不变。 这可能会导致一些相当愚蠢的错误,这种类型有资格出现在每日跆拳道。

Mat的答案是100%正确的,C或C ++标准都没有定义TRUEFALSE 。 但是,它们由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 1 。 以任何方式, FALSE都不是一个特权符号。

在C ++中, false是一个内置的boolean类型的文字,表示false值(其他可能的值用真正的文字表示)

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

false是一个C ++关键字。

FALSE不是由C ++标准定义的。 但是大多数编译器将FALSE定义为值为0的预处理器宏。

只要记住布尔人的真假是什么意思。 他们总是会是整数(0,1)。 编译器可能无法识别它们,但它们将始终作为整数存储并通过CPU运行。 一个调试器会显示这个。 无论是否上限都不重要,因为在实施或使用上应该没有什么不同。 如果你的编译器有一些宏写成支持大小写的真假,那么很好,但这只是为了适应你的需求。 就像所有其他类型一样。

不要使用FALSE 。 正如其他人所说,这是一个宏评估为0.我听说过有人离开公司,并在代码库中随意放置(有意) #define FALSE 1故事。 一个肯定的方式肆虐。

由于它是C ++标准的一部分,所以坚持使用false

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

  bSomeVal != FALSE instead.