来自 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;
嗯……
BOOL
只是一个 int
。
那么这样做的目的到底是什么?这是否只是另一种时代错误,就像我们发现 Windows API 中到处都是一样?
为什么 GetMessage()
不返回 int
值?
我知道最终这并没有什么不同,我只是很好奇是否有人有答案,因为最近一直困扰着我。
谢谢。
附言:
关于我的 oopsie_daisy
评论,我意识到它可以是任何整数值,我是在具有 3 个选项的函数的上下文中说的,而不是 BOOL 只有 3 个可能的值。
最佳答案
参见 When will GetMessage return -1?关于旧的新事物:
Originally, the GetMessage 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/