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

标签 c++ windows

来自 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;


嗯……

BOOL 只是一个 int

那么这样做的目的到底是什么?这是否只是另一种时代错误,就像我们发现 Windows API 中到处都是一样?

为什么 GetMessage() 不返回 int 值?

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

谢谢。

附言:

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

最佳答案

参见 When will GetMessage return -1?关于旧的新事物:

Originally, the Get­Message function did not have a failure mode. If you passed invalid parameters, then you invoked undefined behavior, and you probably crashed.

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

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

关于c++ - 为什么返回 Windows BOOL 数据类型而不是 int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38732832/

相关文章:

c++ - Clang:模板推导失败 'double' 与 '<double>'

c++ - 在 C++ 中读取 XML 文件

c++ - Qt 如何删除对象?存储 QObject 的最佳方式是什么?

windows - 为什么缩放效果只适用于第一张图片?

java - 程序暂停,直到用户按下 Control+C

c# - OO 中的单元测试和访问修饰符

c++ - 点云库 - 如何将单个 RGB 值分配给整个点云?

windows - 如何使用 Windows PC 作为蓝牙隐藏?

c - "warning : No new line at end of file"是什么意思?

c++ - 使用头文件中定义的方法调用 SetWindowsHookEx