我想检查一个GUID结构是否为空/所有字段都为0。以下是我写的代码:
#include <windows.h>
static BOOL IsEmptyGuid(const GUID * const pGuid)
{
return \
(pGuid->Data1 == 0) &&
(pGuid->Data2 == 0) &&
(pGuid->Data3 == 0) &&
#ifdef _WIN64
(*(DWORD64 *)pGuid->Data4 == 0);
#else
(*(DWORD *)pGuid->Data4 == 0) && (*(DWORD *)(pGuid->Data4 + 4) == 0);
#endif
}
/* GUID definition from MSDN
typedef struct _GUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
*/
int main() {
GUID guid1;
guid1.Data1 = 0;
guid1.Data2 = 0;
guid1.Data3 = 0;
memset(guid1.Data4, 0x0, 8);
printf("Result: %u\n", IsEmptyGuid(&guid1));
}
一种更安全的检查字段 Data4
是否等于 0 的方法是迭代每个字节并检查其值。但是,我认为上面的代码更具表现力。
我想知道,这样做是否正确?是否安全?
谢谢!
return \
中的反斜杠没有任何作用。 - underscore_dGUID guid_empty = { 0, 0, 0, { 0, 0, 0, 0, 0, 0, 0, 0 } };
来创建空 GUID,然后再使用内置函数IsEqualGUID
呢?请进行翻译。 - vasek