Там какой-либо путь состоит в том, чтобы получить имя текущей единицы из включать файла?

Вкратце: «неопределенное поведение».

(Теперь, что это может включать в себя и почему это так, как уже говорили другие. Я просто стоил упомянуть термин здесь, так как он довольно распространен).

5
задан Mason Wheeler 31 May 2009 в 19:07
поделиться

1 ответ

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

Для этого требуется, чтобы директива include для вашего включаемого файла появлялась в той части модуля, где разрешены объявления , поэтому либо после предложения 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] uninished.inc (1): W1054 Предупреждения подавлены для непортированного объекта с закомментированным кодом, имя объекта см. В следующей строке
[Подсказка DCC] actualunitname.pas (5): закрытый символ UnitWithSuppressedWarnings был объявлен, но никогда не использовался.

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

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

14
ответ дан 18 December 2019 в 13:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: