{$ IFOPT A4}? - PullRequest
       36

{$ IFOPT A4}?

3 голосов
/ 06 мая 2009

В Delphi 2009 (или более ранних версиях), как вы проверяете опцию "Align" в коде?

Директива IFOPT, похоже, работает только с чистыми ключами ({$IFOPT A4} не компилируется).

Я не смог найти эквивалентную константу или такую ​​определенную ({$IF Align = 4} или такую)

Ответы [ 4 ]

10 голосов
/ 10 мая 2009

Это можно сделать, определив запись с известными правилами упаковки и проверив ее с помощью SizeOf. Протестировано в Delphi 2009:

type
  TTestRec = record
    A: Byte;
    B: Int64;
  end;

{$IF SIZEOF(TTestRec) = 9}
  {$MESSAGE HINT '$A1'}
{$ELSEIF SIZEOF(TTestRec) = 10}
  {$MESSAGE HINT '$A2'}
{$ELSEIF SIZEOF(TTestRec) = 12}
  {$MESSAGE HINT '$A4'}
{$ELSEIF SIZEOF(TTestRec) = 16}
  {$MESSAGE HINT '$A8'}
{$ELSE}
  {$MESSAGE HINT 'Unknown alignment'}
{$IFEND}
3 голосов
/ 06 мая 2009

Напишите код для проверки фактического поведения во время выполнения. Только так, как я могу думать.

1 голос
/ 06 мая 2009

Существует директива {$ IFOPT A +}, но она не сообщает вам значение выравнивания.

0 голосов
/ 06 мая 2009

Я считаю, что нет никакого способа сделать это: (

...