我与一个程序员的小辩论.他在他的代码中使用了以下成语:
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.