Есть ли способ получить имя текущего устройства из файла включения? - PullRequest
5 голосов
/ 31 мая 2009

Я портирую некоторый код из одной библиотеки фреймворка в другую, что требует, чтобы я закомментировал большие разделы кода просто для его компиляции, а затем тщательно восстановил их. Тем временем я получаю тонны предупреждений из-за всего закомментированного кода. Поэтому я решил написать файл быстрого включения, чтобы подавить их:

{$MESSAGE WARN 'Warnings suppressed for unported unit with commented-out code'}
{$WARN NO_RETVAL OFF}
{$WARN USE_BEFORE_DEF OFF}

Я включил это во все модули, которые дают мне массу предупреждений, но теперь, когда я компилирую, компилятор возвращает сообщение следующим образом:

[Предупреждение DCC] unfinished.inc (1): W1054 Предупреждения подавлены для не перенесенного устройства с закомментированным кодом

Я бы хотел сказать, что предупреждение исходит от устройства, выполняющего включение, а не от самого включаемого файла. Есть ли способ сделать это или обработать имя модуля в сообщении, фактически не перемещая директиву $ MESSAGE из включаемого файла в каждый отдельный модуль, где я это сделал?

1 Ответ

14 голосов
/ 01 июня 2009

Вот прием, который использует тот факт, что подсказка компилятора для «неиспользуемых приватных методов» содержит имя модуля, в котором объявлен класс, даже если класс с закрытым методом объявлен во включаемом файле.

Для этого необходимо, чтобы директива include для вашего включаемого файла появлялась в той части модуля, где допускаются объявления , то есть либо после условия использования в разделе интерфейса, либо после использования в разделе раздел реализации.

interface

uses Foo, Bar, Socks;

{$include Unfinished.inc}

Ваш включаемый файл должен выглядеть следующим образом:

{$MESSAGE WARN 'Warnings suppressed for unported unit with commented-out code, Unit name see next line'}
type
  TUnit_With_Suppressed_Warnings = class
  private
    procedure UnitWithSuppressedWarnings; virtual; abstract;
  end;

{$WARN NO_RETVAL OFF}
{$WARN USE_BEFORE_DEF OFF}

Теперь вы получите следующие два сообщения для каждого устройства, включающего этот файл:

[Предупреждение DCC] unfinished.inc (1): W1054 Предупреждения подавлены для не перенесенного устройства с закомментированным кодом, имя устройства см. В следующей строке
[Подсказка DCC] actualunitname.pas (5): Закрытый символ UnitWithSuppressedWarnings был объявлен, но никогда не использовался.

Обратите внимание, что имя фактической единицы появляется во второй строке.

Примечание: вы не увидите вторую строку, если подсказки компилятора отключены.

...