在下面的代码中,为什么需要(VOID *)
在指针中间进行转换?
一些上下文定义:
#define VOID void
typedef unsigned char UINT8;
ErrorDest = (EFI_ACPI_6_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE *)
(VOID *)
((UINT8 *)Hest + Hest->Header.Length);
我能看到的唯一原因是阻止编译器发出有关指针对齐的警告。
UINT8
没有对齐要求。
struct
根据其成员,A可能还有其他对齐要求。通常,结构的对齐要求与其成员的最大对齐要求相同。如果EFI_ACPI_6_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE
是不透明类型(即已声明,但其成员未知),或者如果它包含具有对齐要求的成员,则编译器可能会发出有关对齐的警告。
Avoid*
可以指向任何地址,但是当将其强制转换为另一种指针类型时,即使该类型可能有对齐要求,也可以免于对齐警告。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句