Rid*_*ana 22 c++ windows boolean
在许多程序中,我看到带有标识符FALSE和语句的语句false.它们在C++环境中有什么区别吗?
在某些程序中,我看到了bool某个地方BOOL.这两者有什么区别?
任何人都可以向我解释这些标识符之间的区别吗?谢谢.
Cod*_*ray 25
如果你已经包含windows.h,那么FALSE#defined为0. TRUE#defined为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;
Run Code Online (Sandbox Code Playgroud)
Windows最初是用C语言编写的,与所有原始Windows应用程序一样.那时,C没有标准定义的布尔类型.相反,开发人员被迫定义自己的布尔常量.为了防止可能造成的混乱,Microsoft决定采用可用于所有Windows应用程序的标准.
如果您正在编写Windows应用程序,则可能仍需要使用TRUE和FALSE标识符.windows.h接受布尔参数(实际上是整数!)中定义的几个函数键入BOOL或返回此类型的值.强类型的C++如果将这些强制转换为语言标准中定义的布尔类型,可能会抱怨.为了保持一致性,我在所有对Windows API函数的调用中使用旧标识符,并在我自己编写的所有方法中使用标准定义的true和false关键字.
没有理由不FALSE按照它的定义使用windows.h.但是你不应该像其他人提到的那样在专有头文件中自己定义它,因为不能保证定义会随着时间的推移保持不变.这可能会导致一些非常愚蠢的错误,这种类型有资格出现在Daily WTF上.
垫的回答是100%正确的,无论TRUE或FALSE由C或C++标准中定义.然而,他们是严格由Windows API定义,并且保证不会改变.使用它们不会产生真正的跨平台,严格符合标准的C++代码,但在编写Windows应用程序时这很少是一个问题,因为它们都不会调用任何其他函数windows.h.
Mat*_*Mat 14
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;
}
Run Code Online (Sandbox Code Playgroud)
它将0 1按预期打印.FALSE在任何方面都不是特权符号.