Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么返回Windows BOOL数据类型而不是int?_C++_Windows - Fatal编程技术网

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

C++ 为什么返回Windows BOOL数据类型而不是int?,c++,windows,C++,Windows,从 它声明如下: “如果函数检索的消息不是WM_QUIT,则返回值为非零。 如果函数检索WM_QUIT消息,则返回值为零。 如果有错误,则返回值为-1 boolean值不是true还是false?。这里似乎有三个选项,true,false,和oopsie\u daisy 因此,在键入此内容时,我想我应该检查一下WinDef.h,在其中我发现: typedef int BOOL 嗯 BOOL只是一个int 那么这到底是为了什么呢?这是不是又一个时代错误,就像我们发现Windows API到

它声明如下:

“如果函数检索的消息不是
WM_QUIT
,则返回值为非零。 如果函数检索
WM_QUIT
消息,则返回值为零。 如果有错误,则返回值为-1


boolean
值不是
true
还是
false
?。这里似乎有三个选项,
true
false
,和
oopsie\u daisy

因此,在键入此内容时,我想我应该检查一下
WinDef.h
,在其中我发现:


typedef int BOOL


BOOL
只是一个
int

那么这到底是为了什么呢?这是不是又一个时代错误,就像我们发现Windows API到处都是一样

为什么
GetMessage()
不返回
int

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

多谢各位

附言:

关于我的
oopsie\u daisy
备注,我意识到它可以是任何整数值,我是在函数有3个选项的上下文中说的,而不是BOOL只有3个可能的值。

请参见旧的新事物:

最初,Get-Message函数没有故障模式。如果您传递了无效的参数,那么您调用了未定义的行为,可能会崩溃

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


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

BOOL
表示在正常情况下,没有参数错误,根据通常的C约定0=false,该值可以解释为布尔值,因为它最初用于
GetMessage

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

GetMessage
被更改为同时返回一个错误指示器时,为什么这一点没有更改,可能无法回答

注:
¹

提示:Windows API是1981-1990年间发明的
bool
于1999年添加到C中。(奇怪的是,C++自从1989以来就有了<代码> Boo.<代码>),这对于面向对象代码来说并不少见: >真< /COD>,<代码> false <代码>是一个运行良好定义过程的输出,错误是其余的。例如,在Java中,对象布尔值可以是
null
,0或1。强制性问题:谁在乎<已知code>BOOL
int
typedef
。返回
BOOL
的API记录了可能返回值的含义,大多数API仅区分
0
非0
。所以,除了美学之外,没什么大问题。[编辑]尽管如此,我不理解反对票。对我来说,这听起来像是一个完全合法的
winapi
问题。我认为投票被否决是因为这个问题只能由决定使用
BOOL
而不是
int
的人来回答。任何人的尝试都只是猜测。向后兼容性是windows中许多怪癖的原因。嗯,至少我不是唯一一个觉得它奇怪的人。
BOOL WINAPI GetMessage(
  _Out_    LPMSG lpMsg,
  _In_opt_ HWND  hWnd,
  _In_     UINT  wMsgFilterMin,
  _In_     UINT  wMsgFilterMax
);