Ответ 1
Согласно документации Delphi:
http://docwiki.embarcadero.com/RADStudio/XE6/en/Conditional_compilation_%28Delphi%29
Условные директивы {$ IFDEF}, {$ IFNDEF}, {$ IF}, {$ ELSEIF}, {$ ELSE}, {$ ENDIF} и {$ IFEND} позволяют вам компилировать или подавлять код на основе статус условного символа.
{$IFDEF}
и {$IFNDEF}
позволяют работать только с ранее заданными параметрами {$DEFINE ...}
.
Однако директива {$IF ..}
гораздо более гибкая, потому что:
Идентификаторы Delphi нельзя ссылаться ни на какие условные директивы, кроме {$ IF} и {$ ELSEIF}.
const LibVersion = 6; //One constant to define the libversion.
{$IF LibVersion >= 10.0}
do stuff that covers LibVersion 10,11 and 12
{$ELSEIF Libversion > 5.0}
do other stuff that covers LibVersion 6,7,8,9
{$IFEND}
Если вы попытаетесь сделать это с помощью определений, вам нужно будет сделать
{$DEFINE Lib1}
{$DEFINE Lib2}
{$DEFINE Lib3}
{$DEFINE Lib4}
{$DEFINE Lib5}
{$DEFINE Lib6} //all previous versions have to be defined.
{$IFDEF Lib10}
do stuff that covers LibVersion 10, 11 and 12
{$ELSE}
{$IFDEF Lib6}
do stuff that covers LibVersion 6,7,8,9
{$ENDIF}
{$ENDIF}
Это немного более продвинутая версия обработки определений.
Обозначение {$ IF..} немного более мощное и позволяет запрашивать постоянные выражения, а не только определяет.
Директива {$IF ..}
была введена в Delphi 6.
Я думаю, Embarcadero решил очистить базу кода.