HANDLE 类型的变量可以与 C 中的 NULL 进行比较吗?
A variable of type HANDLE can be compared with NULL in C?
声明为 HANDLE
的变量可以与 C 中的 NULL
进行比较?谢谢。
版次:
例如:
HANDLE hProcess = NULL;
status = ZwOpenProcess(&hProcess, PROCESS_DUP_HANDLE, &ob, &Cid);
if (hProcess != NULL)
{
ZwClose(hProcess);
hProcess = NULL;
}
目标是检查 hProcess
是否为 != 0
。那么如果我检查 != NULL
,意思是一样的吗?
任何指针类型,都可以与 NULL
进行比较。结果将是假的(即,它将是不相等的),假设原始变量包含该类型的空指针以外的任何值。
引用 C11
,
[...] If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.
(评论太长。)
The goal is check if hProcess
is != 0
.
您可以按照其他答案中的说明使用 if(hProcess != NULL) { /*...*/ }
检查。
但是,在给定的示例中,必须检查的是 API 调用的 return 值。
HANDLE hProcess;
if(NT_SUCCESS(ZwOpenProcess(&hProcess, PROCESS_DUP_HANDLE, &ob, &Cid)))
{
/*... use hProcess ...*/
ZwClose(hProcess);
}
else
{
/*... handle error ...*/
}
声明为 HANDLE
的变量可以与 C 中的 NULL
进行比较?谢谢。
版次:
例如:
HANDLE hProcess = NULL;
status = ZwOpenProcess(&hProcess, PROCESS_DUP_HANDLE, &ob, &Cid);
if (hProcess != NULL)
{
ZwClose(hProcess);
hProcess = NULL;
}
目标是检查 hProcess
是否为 != 0
。那么如果我检查 != NULL
,意思是一样的吗?
任何指针类型,都可以与 NULL
进行比较。结果将是假的(即,它将是不相等的),假设原始变量包含该类型的空指针以外的任何值。
引用 C11
,
[...] If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.
(评论太长。)
The goal is check if
hProcess
is!= 0
.
您可以按照其他答案中的说明使用 if(hProcess != NULL) { /*...*/ }
检查。
但是,在给定的示例中,必须检查的是 API 调用的 return 值。
HANDLE hProcess;
if(NT_SUCCESS(ZwOpenProcess(&hProcess, PROCESS_DUP_HANDLE, &ob, &Cid)))
{
/*... use hProcess ...*/
ZwClose(hProcess);
}
else
{
/*... handle error ...*/
}