在许多程序中,我看到标识符为FALSE
和false
语句。 他们之间有什么区别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最初是用C编写的,就像所有原始的Windows应用程序一样。 那时候,C没有标准定义的布尔类型。 相反,开发人员被迫定义自己的布尔常量。 为了防止可能造成的混乱,微软决定使用所有Windows应用程序的标准。
如果您正在编写Windows应用程序,则可能仍然需要使用TRUE
和FALSE
标识符。 在windows.h
定义的几个函数要么接受布尔参数(实际上是整数!)类型为BOOL
或返回这种类型的值。 强类型的C ++可能会抱怨,如果将它们强制转换为语言标准中定义的布尔类型。 为了保持一致性,我在Windows API函数的所有调用中使用旧的标识符,以及在我自己编写的所有方法中现在由标准定义的true
和false
关键字。
没有理由不使用FALSE
因为它是在windows.h
定义的。 但是,正如其他人所说的那样,您不应该自己在私有头文件中定义它,因为不能保证定义将随着时间的推移保持不变。 这可能会导致一些相当愚蠢的错误,这种类型有资格出现在每日跆拳道。
Mat的答案是100%正确的,C或C ++标准都没有定义TRUE
或FALSE
。 但是,它们是由Windows API严格定义的,并保证不会更改。 使用它们不会产生真正的跨平台,严格符合标准的C ++代码,但在编写Windows应用程序时,这几乎不是问题,因为它们都不会调用windows.h
任何其他函数。
标准中没有定义FALSE
。 唯一的false
是。 true
和false
都被称为“布尔文输入”(并且是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库函数将返回任意整数值。 最好不要将BOOL
与TRUE
进行比较。 使用
bSomeVal != FALSE instead.