gpt4 book ai didi

c++ - 成功时具有非零返回值的 WINAPI 方法

转载 作者:行者123 更新时间:2023-11-30 04:08:27 25 4
gpt4 key购买 nike

对于许多 WINAPI 方法,返回值为 0(失败)或非零(成功)。例如:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682565(v=vs.85).aspx

Return value

If the function succeeds, the return value is nonzero.If the function fails, the return value is zero.

我的问题是,对于这样的方法,用 TRUE(BOOL 值等于 1)测试返回值是否正确?还是测试返回值是否为 !FALSE 更正确?

另一个不相关的问题是,当返回值非零时,它到底是什么?它可以是任何值还是来自一组值?

最佳答案

你提到的方法的签名是:

BOOL WINAPI DeleteTimerQueue(_In_ HANDLE TimerQueue);

在 Windows header 中类型 BOOL 被定义为一个 int 。这是出于历史原因,因为在 C99 之前的日子里没有 bool 是我们现在熟悉的类型,WinAPI 也一直沿用后面介绍的很多方法的 BOOL 定义。

此外,Windows header 看起来与此非常相似,如果我们冒昧地简化一下,

typedef int   BOOL
#define FALSE 0 // < note that #define <number> introduces an integer constant
#define TRUE 1

因此您的问题可以解释为是否测试 !<integer>等同于针对 bool 值进行测试。答案是肯定的,有C++测试!0 == true!n == false对于任何积分 n > 0 .

Another nonrelated question is, when the return value is non-zero, what exactly is it? Can it be any value or from a set of values?

不同的WinAPI方法会有所不同。通常它可以是任何值,但由于返回类型在概念上是 bool 值,因此可以将其作为 bool 值进行测试。

so to sum up I should check it as …

检查的惯用方法是:

if(!DeleteTimerQueue(handle)) {
/* handle the error case */
/* call GetLastError() where applicable */
}
/* otherwise proceed, the call succeeded */

关于c++ - 成功时具有非零返回值的 WINAPI 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21836665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com