2009-05-31 11 views
5

Estoy portando algún código de una biblioteca de framework a otra, lo que me obliga a comentar grandes secciones de código solo para compilarlo, y luego restaurarlo cuidadosamente. Mientras tanto, recibo un montón de advertencias debido a todo el código comentado. Así que decidí escribir una rápida archivo de inclusión de suprimirlos:¿Hay alguna forma de obtener el nombre de la unidad actual de un archivo de inclusión?

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

I incluyó 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 de la siguiente manera:

[DCC aviso] unfinished.inc (1): Advertencias W1054 suprimidas para la unidad no adaptada con código comentado de salida

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

Respuesta

14

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

Esto requiere que la directiva include para su archivo de inclusión aparece en una parte de la unidad, donde se permiten declaraciones, así que o después de la cláusula de usos en la sección de interfaz o después de la cláusula uses 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 que incluyen archivo:

[DCC Aviso] inacabado.inc (1): W1054 Advertencias suprimidas para unidad no portada con código descomprometido, Nombre de unidad vea la siguiente línea
[Sugerencia DCC] actualunitname.pas (5): El símbolo privado UnitWithSuppressedWar nings fue declarado pero nunca utilizado.

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

Observación: No verá la segunda línea si las indicaciones del compilador están desactivadas.

+0

Me gusta! Es un poco complicado, pero se las arregla para encontrar la forma de hacer lo que pensé que no se podía hacer. –

+1

Genio, borré mi respuesta :) –

+0

¡Muy creativo! –

Cuestiones relacionadas