为什么返回Windows BOOL数据类型而不返回int
Why return the Windows BOOL data type and not int?
来源MSDN。
BOOL WINAPI GetMessage(
_Out_ LPMSG lpMsg,
_In_opt_ HWND hWnd,
_In_ UINT wMsgFilterMin,
_In_ UINT wMsgFilterMax
);
声明如下:
"如果函数检索的消息不是WM_QUIT
,则返回值为非零。如果函数检索WM_QUIT
消息,则返回值为零。如果出现错误,返回值为-1。"
boolean
的值不是true
就是false
吗?。这里似乎有三个选项,true
、false
和oopsie_daisy
。。。。
所以,在打字的时候,我想我应该去检查WinDef.h
,在里面我发现:
typedef int BOOL;
小时。。。
CCD_ 11只是一个CCD_。
那么这究竟是为了什么呢?这只是另一个时代错误,就像我们发现的Windows API到处都是?
为什么GetMessage()
不返回int
值?
我知道这最终不会有什么不同,我只是好奇是否有人有答案,因为它最近一直困扰着我。
谢谢。
PS:
关于我的oopsie_daisy
备注,我意识到它可以是任何整数值,我是在有3个选项的函数的上下文中说的,而不是BOOL只有3个可能的值。
查看GetMessage何时返回-1?论新旧事物:
最初,Get-Message函数没有故障模式。如果您传递了无效的参数,那么您调用了未定义的行为,很可能会崩溃。
因此,GetMessage最初返回TRUE或FALSE。因此CCD_ 16的选择在当时是完全合理的。
至于为什么当行为改变时,签名没有改变,这可能只是惯性和/或向后兼容性。
BOOL
表示在正常情况下,没有参数错误,根据通常的C惯例0=false,该值可以解释为布尔值,就像它最初用于GetMessage
:一样
"如果检索到WM_QUIT以外的消息,则GetMessage()函数的返回值为TRUE。如果检索到WM_QUIT消息,则返回值为FALSE。
当GetMessage
被更改为也返回错误指示符时,为什么这一点没有改变,可能无法回答。
注意:
ccohttp://www.ecma-international.org/publications/standards/Ecma-234.htm
- 如果"new int"返回"int*",那么为什么"new int[n]"不返回"int**"?
- 返回 int 中可被 2 c++ 整除的所有数字的总和
- 如何正确重载 << 运算符以返回 int 值?
- 返回 int 时的分段错误
- 返回int数据类型v/s传递参考
- char*中存储的返回int值(0-255)给出了负值
- C++. 面试. 关于返回 int* 值问题的范围
- 调用从Java返回INT值的C 函数
- 使用 static int 返回 int&in 函数
- 从函数 CPP 返回 int 或 string.c_str() 时的两个不同的行为
- 超能力 NDK 安卓:返回 int 在"extern"块中成功,在调用函数中失败
- 如何使用 boost::bind 将返回 int 的函数转换为返回布尔值的函数
- 为什么在应该返回对象的方法中返回 int 是有效的
- main() 总是返回 int
- 从函数返回"int * const"
- C++函数向字符串变量返回int
- 从返回int的函数中获取char的正确方法
- 为什么这个阶乘函数返回int而不是double
- 为什么 isnan、isinf 和 isfinite 返回 int 而不是布尔值
- 返回 std::string 的函数在没有 return 语句的情况下崩溃,这与返回 int 而不返回语句的函数不同