Existe alguma maneira de obter o nome da unidade atual a partir de um arquivo de inclusão?

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

Pergunta

Eu sou portando algum código de uma biblioteca quadro para outro, o que me obriga a comentar grandes seções de código apenas para obtê-lo para compilar e, em seguida, restaurá-los com cuidado. Nesse meio tempo, eu recebo toneladas de avisos por causa de todo o código comentado-out. Então eu decidi escrever uma rápida incluem arquivo para suprimi-los:

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

Eu incluí isto em todas as unidades que estão me dando toneladas de avisos, mas agora quando eu compilar, o compilador está retornando a mensagem da seguinte forma:

[DCC aviso] unfinished.inc (1): W1054 avisos suprimidos por unidade portada com código comentada

Eu gostaria que ele me diga que o aviso é proveniente da unidade fazendo o inclusive, não o próprio arquivo de inclusão. Existe alguma maneira de fazer isso, ou para trabalhar o nome da unidade na mensagem, sem realmente mover a directiva $ MENSAGEM fora do arquivo de inclusão e em cada unidade onde eu fiz isso?

Foi útil?

Solução

Aqui está um truque, que usa o fato de que a dica de compilador de "métodos privados não utilizados" contém o nome da unidade, a classe é declarada, mesmo que a classe com o método privado é declarado em um arquivo de inclusão.

Isto requer que o para os seus incluem aparece de arquivo em uma parte da unidade, em que as declarações são permitidos-directiva incluem , então ou depois da cláusula uses na seção interface ou depois da cláusula de usos de a seção de implementação.

interface

uses Foo, Bar, Socks;

{$include Unfinished.inc}

Seu arquivo de inclusão deve ficar assim:

{$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}

Agora, você vai ter as seguintes duas mensagens para cada unidade que inclui que incluem arquivo:

[DCC aviso] unfinished.inc (1): W1054 avisos suprimidos para a unidade portada com código comentado-out, nome Unit ver próxima linha
[DCC Dica] actualunitname.pas (5):. Os UnitWithSuppressedWarnings símbolo privadas foi declarada mas nunca usado

Observe que o nome da unidade real aparece na segunda linha.

Observação:. Você não vai ver a segunda linha, se dicas de compilador estão desligados

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top