最小枚举大小在Delphi中不起作用

Dal*_*kar 2 delphi enums

为了与C/C++结构交互,我必须将Delphi记录中的最小枚举大小设置为4.但是,我无法让它正常工作.

type
  TFooEnum = (e1, e2, e3);

  {$Z4}
  TFoo = record
  public
    f: TFooEnum;
    b: byte;
  end;
  {$Z1}

  writeln(SizeOf(TFoo)); -> output is 2 instead of 8
Run Code Online (Sandbox Code Playgroud)

我也试图与{$Z+}{$MINENUMSIZE 4}它只有当我在整个项目的编译器选项设置它的工作原理,但弄乱其他记录存储布局,其中枚举必须在1个字节.

Dav*_*nan 7

大小是枚举类型本身的属性.所以你必须像这样声明你的枚举类型:

type
  {$Z4}
  TFooEnum = (e1, e2, e3);
  {$Z1}
Run Code Online (Sandbox Code Playgroud)

考虑这一点的方法是,对齐记录的记录布局完全由记录成员的大小和对齐属性决定.该$MINENUMSIZE指令仅通过其对任何枚举类型成员的大小和对齐属性的影响间接地影响了运算.

  • 在文档中只有三行,我不必问愚蠢的问题.谢谢! (2认同)