Вкратце: «неопределенное поведение».
(Теперь, что это может включать в себя и почему это так, как уже говорили другие. Я просто стоил упомянуть термин здесь, так как он довольно распространен).
Вот трюк, который использует тот факт, что подсказка компилятора для «неиспользуемых частных методов» содержит имя модуля, в котором объявлен класс, даже если класс с частным методом объявлен во включаемом файле.
Для этого требуется, чтобы директива 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 был объявлен, но никогда не использовался.
Обратите внимание, что имя фактического объекта отображается во второй строке.
Примечание: вы не увидите вторую строку , если подсказки компилятора отключены.