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

时间:2016-08-03 01:15:57

标签: c++ windows

source code

BOOL WINAPI GetMessage(
  _Out_    LPMSG lpMsg,
  _In_opt_ HWND  hWnd,
  _In_     UINT  wMsgFilterMin,
  _In_     UINT  wMsgFilterMax
);

它陈述如下:

"如果函数检索WM_QUIT以外的消息,则返回值为非零。 如果函数检索WM_QUIT消息,则返回值为零。 如果出现错误,则返回值为 -1 。"

Aren的boolean值为truefalse?我们在这里有三个选项,truefalseoopsie_daisy ....

因此,在输入此内容时,我认为应该检查WinDef.h并在其中找到:

typedef int BOOL;

... Hrmmm

BOOL只是int

那究竟是什么目的呢?它只是另一种时代错误,就像我们发现Windows API乱七八糟的那样?

为什么没有GetMessage()返回int值?

我知道最终它并没有什么不同,我只是好奇是否有人得到答案,因为它最近一直困扰着我。

谢谢。

PS:

关于我的oopsie_daisy评论,我意识到它可以是任何整数值,我在具有3个选项的函数的上下文中说,而不是BOOL只有3个可能的值。

2 个答案:

答案 0 :(得分:6)

请参阅The Old New Thing上的When will GetMessage return -1?

  

最初,GetMessage函数没有失败模式。如果您传递了无效参数,那么您调用了未定义的行为,并且您可能已崩溃。

因此,最初,GetMessage返回TRUE或FALSE。因此,BOOL的选择在当时是完全合理的。

至于为什么签名在行为改变时没有改变,这可能只是惯性和/或向后兼容性。

答案 1 :(得分:1)

BOOL表示在正常情况下,没有参数错误,该值可以解释为布尔值,按照通常的C约定0 = false ,因为它原来是GetMessage

ECMA-234§8.3:
  

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

为什么在GetMessage更改为也返回错误指示符时未更改此内容,可能无法回答。

注意:
¹http://www.ecma-international.org/publications/standards/Ecma-234.htm 功能