问题
In Delphi 2009 (or older versions), how do you check the "Align" compile option in the code?
The IFOPT
directive seems to work only with pure switches ( {$IFOPT A4}
does not compile ).
I couldn't find an equivalent constant or such defined ( {$IF Align = 4}
or such )
回答1:
You can do this by defining a record with known packing rules and check it using SizeOf. Tested in 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}
回答2:
Write code to test the actual runtime behavior. Only way I can think of.
回答3:
There is {$IFOPT A+} directive, but it doesn't tell you alignment value.
回答4:
I believe there is no way to do this :(
来源:https://stackoverflow.com/questions/829235/ifopt-a4