我目前正在阅读“COM和ATL 3.0开发人员研讨会”。第3章介绍了GUID,引用和比较。指针很痛苦。我可以使用一些帮助来解密REFGUID #define
(见下文)以及memcmp
中的IsEqualGUID
如何对付指针。
鉴于:
typedef struct_GUID{ unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8]; } GUID;
我如何解释这个#define
?:
#define REFGUID const GUID * const
&rguid1
如何解决传入变量?
BOOL IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
{
return !memcmp(&rguid1, &rguid2, sizeof(GUID));
}
答案 0 :(得分:4)
REFGUID是常量ptr到一个恒定的guid(即两者都不能改变)。
不要回答代码?
BOOL IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
{
return !memcmp(rguid1, rguid2, sizeof(GUID));
}
作为memcmp:
int memcmp(const void *s1, const void *s2, size_t n);
应该传递memcmp指针(rguidx)而不是指针的地址。
如果看起来代码最初用REGUID定义为const GUID或const GUID引用(C ++)或许
答案 1 :(得分:3)
define REFGUID是指向GUID
的指针,其中以下内容为真
GUID
答案 2 :(得分:3)
REFGUID在C ++和C上下文中的定义不同。如果你看一下它的定义,那就是:
#ifdef __cplusplus
#define REFGUID const GUID &
#else
#define REFGUID const GUID *
#endif
IsEqualGUID()函数也有不同的实现。
我不喜欢这个主意。我猜这个人发明这个只是为了让它“C ++正确”,因为C ++发明者认为引用比指针好。
答案 3 :(得分:1)
#define REFGUID const GUID * const
等于(不是C ++代码,抽象!)
const GUID * const == REFGUID
等于
GUID const * const == REFGUID
所以它是const指针(不能改变poiter)到const GUID对象(不能改变值)。