我可以一直假设sizeof(GUID)== 16吗?

JE4*_*E42 5 windows guid sizeof

windows标题中GUID的定义如下:

typedef struct _GUID {
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[ 8 ];
} GUID;
Run Code Online (Sandbox Code Playgroud)

但是,没有定义包装.由于结构成员的对齐取决于编译器实现,因此可以认为该结构的大小可能超过16个字节.

如果我可以假设它总是16个字节 - 我使用GUID的代码更有效和简单.但是,如果编译器由于某种原因在成员之间添加了一些填充,那将完全不安全.

我的问题存在潜在的原因吗?或者是sizeof(GUID)!= 16实际上是0的场景的概率.

Vil*_*lx- 7

这不是官方文档,但也许这篇文章可以减轻您的一些担忧。我认为还有另一篇类似主题的文章,但我现在找不到了。

我想说的是,Windows 结构确实有一个打包说明符,但它是一个全局设置,位于头文件内的某个位置。这是一个#pragma或某事。而且它是强制性的,因为否则由不同编译器编译的程序无法相互交互,甚至无法与 Windows 本身交互。