Есть ли способ получить имя текущего модуля из включаемого файла?

StackOverflow https://stackoverflow.com/questions/932638

Вопрос

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

{$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 из включаемого файла в каждый отдельный модуль, где я это сделал?

Это было полезно?

Решение

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

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

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] фактическоеимя_модуля.pas(5):Закрытый символ UnitWithSuppressedWarnings был объявлен, но никогда не использовался.

Обратите внимание, что имя фактического устройства отображается во второй строке.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top