¿Hay alguna manera de obtener el nombre de la unidad actual de un archivo de inclusión?

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

Pregunta

Estoy portar algún código de una biblioteca de marco a otro, lo que me obliga a comentar a cabo grandes secciones de código sólo para que se compile, y luego, con cuidado restaurarlas. Mientras tanto, consigo toneladas de advertencias debido a todo el código comentado de salida. Así que decidí escribir un archivo de inclusión rápida de suprimirlos:

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

He incluido esto en todas las unidades que me están dando un montón de advertencias, pero ahora cuando compilo, del compilador de devolver el mensaje siguiente:

[DCC Warning] unfinished.inc (1): Advertencias W1054 suprimidos para la unidad Unported con código comentado de salida

Me gustaría que me dijera que la advertencia proviene de la unidad haciendo lo que incluye, no el archivo de inclusión en sí. ¿Hay alguna manera de hacer eso, o para trabajar el nombre de la unidad en el mensaje, sin mover realmente la directiva $ mensaje del archivo de inclusión y en cada unidad donde hice esto?

¿Fue útil?

Solución

Aquí es un truco, que utiliza el hecho de que la pista compilador para "métodos privados no utilizados" contiene el nombre de la unidad, la clase se declara en, incluso si la clase con el método privado se declara en un archivo de inclusión.

Esto requiere que la directiva de inclusión para su archivo de inclusión aparece en una parte de la unidad, donde las declaraciones se permite , así que o después de la cláusula de usos en la sección de interfaz o después de la cláusula de usos de la sección de implementación.

interface

uses Foo, Bar, Socks;

{$include Unfinished.inc}

Su archivo de inclusión debería tener este aspecto:

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

Ahora, obtendrá los dos mensajes siguientes para cada unidad que incluye archivos que incluyen:

  

[DCC Aviso] unfinished.inc (1): Advertencias W1054 suprimidas para la unidad no adaptada con el código comentado de salida, el nombre de unidad ver la siguiente línea
  [DCC Sugerencia] actualunitname.pas (5):. Los UnitWithSuppressedWarnings símbolo privados fue declarado pero nunca utilizan

Tenga en cuenta que el nombre de la unidad real aparece en la segunda línea.

Observación: No verá la segunda línea, si indirectas del compilador se desconectan

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top