如何检查没有填充的struct的大小?

Vad*_* S. 7 c c++ gcc

让我们假设我有一个结构:

struct A {
  uint16_t a;
  uint64_t b;
};
Run Code Online (Sandbox Code Playgroud)

有没有办法获得A w/o填充的大小?ie:所有成员的sizeof总和(即使它不是递归的).

通常sizeof(A) == 16. 我想__GCC_sizeof__(A) == 10.

我希望它在测试代码中不影响实际代码,这意味着在结构定义中没有"#pragma"s和no "__attribute__".(虽然它可以完成#ifdef TEST,但它非常难看).

它不必是便携式的,GCC足够了.

谢谢!

Mar*_*k B 5

我认为sizeof(A::a) + sizeof(A::b)应该为你做的伎俩.没有办法获得一个未填充大小的结构,因为这样的大小可以用于程序的目的是什么?


Mat*_* M. 3

目的是能够从测试内部跟踪新添加的结构成员。

如果你先问这个问题会更好...

答案是肯定的,有办法,但不是通过#include文件;您应该使用能够获取 AST/ABT 结构并列出字段的工具,然后将其与预先注册的列表进行比较。例如,这对于 Clang 来说是可能的。


但现在,让我们更进一步。你为什么要测试它?很脆!

最好测试一下功能,隐藏的东西是有原因的。

如果每个功能都经过正确测试,那么只要测试通过,您是否知道字段列表并不重要。