Ja, das war auch Absicht, mit dem Unterscheiden.
Delphi hatte sich früher mal gerühmt so extrem abwertskompatibel zu sein, aber das war einmal,
und da war es gut, das man für Compiler bis Delphi 5 ein $IF im $IFDEF verstecken kann, weil er das noch nicht kennt.
Delphi-Quellcode:
{$IFDEF ConditionalExpressions} // das springt bis zum nächsten $IFEND bzw. $ELSE
{$IF xxxx}
{$IFEND} // heißt anders, damit $IFDEF es nicht als sein Ende erkennt
{$ELSE}
...
{$IFEND}
Delphi-Quellcode:
const abc = 13;
{$IF abc > 10}
oder
{$IF (abc > 10) and (abc < 15)}
Delphi-Quellcode:
{$IFNDEF VER150} // hier wird es Spaß sich eine INC zu besorgen, um Versionen besser zu prüfen, was gern knallt, wenn man diese INC auf eine zu neue Delphi-Version los lässt
gegen
{$IF CompilerVersion < 15.0}
Oder ein lustiger Code für die Größenprüfung. (ja, zu Zeiten von 16 Bit gab es das $IF noch nicht)
Delphi-Quellcode:
{$IF SizeOf(Integer) = 2}
{MESSAGE Hint '16 Bit'}
{$ELSEIF Declared(NativeInt) and (SizeOf(NativeInt) = 4)}
{MESSAGE Hint '32 Bit'}
{$ELSEIF Declared(NativeInt) and (SizeOf(NativeInt) = 8)}
{MESSAGE Hint '64 Bit'}
{$ELSEIF Declared(NativeInt)}
{MESSAGE Hint 'gibt es endlich 128 Bit?'}
{$ELSE}
{MESSAGE Hint '32 Bit, bevor der Mist mit dem "neuen" Integer erfunden wurde'}
{$IFEND}