为什么返回Windows BOOL数据类型而不返回int

Why return the Windows BOOL data type and not int?

本文关键字:返回 int BOOL Windows 为什么 数据类型      更新时间:2023-10-16

来源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吗?。这里似乎有三个选项,truefalseoopsie_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:一样

ECMA-234§8.3:

"如果检索到WM_QUIT以外的消息,则GetMessage()函数的返回值为TRUE。如果检索到WM_QUIT消息,则返回值为FALSE。

GetMessage被更改为也返回错误指示符时,为什么这一点没有改变,可能无法回答。

注意:
ccohttp://www.ecma-international.org/publications/standards/Ecma-234.htm