我和一位程序员同事进行了一场小辩论。他在他的代码中使用了以下习语:
HWND hWnd = SomeFunctionWhichReturnsAWindow();
if(hWnd != NULL && hWnd != INVALID_HANDLE_VALUE)
{
// All good
}
else
{
// Error
}
我告诉他在我看来这是一个错误的方法,因为 HWND
类型与 INVALID_HANDLE_VALUE
定义无关,但他确信这是好的代码,因为有效句柄永远不会等于 INVALID_HANDLE_VALUE
,而且它的意思是“安全总比遗憾好”。
那么,这是一个可以接受的正确成语吗?
最佳答案
将 HWND
与 INVALID_HANDLE_VALUE
进行比较是错误的。虽然,在实践中,这不是一个会伤害你的错误。
CreateWindowEx
保留为无效的唯一 HWND
值是 NULL
。现在,它恰好是一个实现细节,INVALID_HANDLE_VALUE
永远不可能是一个有效的 HWND
,但这只是实现细节。生成窗口句柄的函数 CreateWindowEx
使用 NULL
来指示失败。这就是您需要知道的全部内容。
如果您想赢得与同事的争论,我建议您查看 SomeFunctionWhichReturnsAWindow
并找出调用了哪个 Win32 API 来生成 HWND
。然后查阅文档。这将告诉您 NULL
是保留的无效值。
为了清晰起见,您绝对应该更改代码以单独针对 NULL
进行测试。
关于c - 将 `HWND` 与 `INVALID_HANDLE_VALUE` 进行比较是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26303039/