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

时间:2015-02-23 12:15:27

标签: 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

我也试过{$Z+}{$MINENUMSIZE 4}它只有在整个项目的编译器选项中设置它才有效,但这会弄乱其他记录内存布局,其中枚举的大小必须是1个字节

1 个答案:

答案 0 :(得分:7)

size是枚举类型本身的属性。所以你必须声明你的枚举类型:

type
  {$Z4}
  TFooEnum = (e1, e2, e3);
  {$Z1}

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