Могу ли я создать пользовательскую ошибку компилятора? Если да, то как?

Вот что я хочу сделать. У меня есть проект, который должен быть скомпилирован в некоторой версии Delphi или позже. Я хотел бы использовать условную директиву компилятора для проверки версии Delphi, а затем вызвать создание пользовательской ошибки компилятора с помощью настраиваемого сообщения. Возможность генерировать настраиваемое предупреждение или подсказку компилятора также может быть adaquate, если ошибка невозможна.

Конечно, я мог бы поместить некоторый un-compilable giberish в сегмент условного кода, и это прекрасно. Но мой вопрос: "Могу ли я генерировать условно ошибку пользовательского компилятора?"


Спасибо Йохан и Серг.

Вот решение и более подробная информация о проблеме. У меня есть приложение, которое было первоначально создано в Delphi 2007. Оно включает компоненты Internet Direct для присоединения к веб-службе. Они используют SSL. Недавно я обновил свои библиотеки SSL до более поздней версии, и они не так хорошо работают с компонентами Delphi 2007 Indy. Теперь я добавил следующие директивы компилятора, чтобы убедиться, что это приложение больше не будет скомпилировано с Delphi 2007 или ранее:

{$IF CompilerVersion <= 19.0} // Delphi 2007 = 19.0
   {$MESSAGE Error 'This project must be compiled in Delphi 2009 or later'}
{$IFEND}

Ответ 1

Вы можете использовать:

{$Message HINT|WARN|ERROR|FATAL 'text string' } 



{$MESSAGE 'Boo!'}                   emits a hint 
{$Message Hint 'Feed the cats'}     emits a hint 
{$messaGe Warn 'Looks like rain.'}  emits a warning 
{$Message Error 'Not implemented'}  emits an error, continues compiling 
{$Message Fatal 'Bang.  Yer dead.'} emits an error, terminates compiler 

Смотрите: http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsmessagedirective_xml.html

Это работает в Delphi 6 и более поздних версиях.

Ответ 2

Проверка версии Delphi стала легкой, поскольку в Delphi 6 была введена директива CONDITIONALEXPRESSIONS:

program requires2010;

{$APPTYPE CONSOLE}

{$IFDEF CONDITIONALEXPRESSIONS}
   {$IF CompilerVersion >= 21.0} // 21.0 is Delphi 2010
     {$DEFINE DELPHI2010}
   {$IFEND}
{$ENDIF}

begin
{$IFNDEF DELPHI2010}
  {$MESSAGE Fatal 'Wrong Delphi Version'}
{$ENDIF}
  Writeln('Continued');
  Readln;
end.