2009-05-31 3 views
5

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

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

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

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

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

ответ

14

Вот трюк, который использует тот факт, что подсказка компилятора для «неиспользуемых частных методов» содержит имя устройства, класс объявлен, даже если класс с приватным методом объявлен в файле 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 Warning] unfinished.inc (1): W1054 Предупреждения подавлены для непортируемого блока с кодом с комментариями, Название элемента см. в следующей строке
[DCC Hint] actualunitname.pas (5): Частный символ UnitWithSuppressedWar были объявлены, но никогда не использовались.

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

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

+0

Мне это нравится! Это немного взломать, но ему удается найти способ сделать то, что, как я думал, не может быть сделано. –

+1

Genius, удалил мой ответ :) –

+0

Очень творчески! –

 Смежные вопросы

  • Нет связанных вопросов^_^