微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么返回Windows BOOL数据types而不是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 ….

如何使运行WPF应用程序窗口透明?

检测文件是否在C ++中打开

Windows GDI上下文 – 函数失败,GetLastError()返回0

使用SAFEARRAY编组本地数组的最佳select

无法用Python在Windows上定位长名称文件

所以,当input这个时,我想我应该去检查WinDef.h并在其中发现:

typedef int BOOL;

Hrmmm …

BOOL只是一个int 。

那么究竟是什么目的呢? 这只是另一个时代错误,就像我们发现散布的Windows API一样?

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

我知道最终它没有什么区别,我只是好奇是否有人有答案,因为最近一直在困扰着我。

谢谢。

PS:

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

如何将表单添加到托盘中

我们可以把Python for Cygwin当作win32平台吗? (安装PyBluez)

在Windows上为64位构buildQuickfix

从Windows创build一个unix符号链接(最好通过python)

如何在c ++中使用tagDEC(DECIMALtypes)?

请参阅何时将GetMessage返回-1? 旧新事物:

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐