5 Stimmen

Gibt es eine Möglichkeit, den Namen der aktuellen Einheit aus einer Include-Datei zu erhalten?

Ich portiere gerade einige Code-Fragmente von einer Framework-Bibliothek in eine andere, wodurch ich gezwungen bin, große Abschnitte des Codes auszukommentieren, um ihn überhaupt kompilieren zu können, und sie dann sorgfältig wiederherzustellen. In der Zwischenzeit erhalte ich Tonnen von Warnungen aufgrund des ganzen auskommentierten Codes. Deshalb habe ich beschlossen, eine schnelle Include-Datei zu schreiben, um sie zu unterdrücken:

{$MESSAGE WARN 'Warnungen unterdrückt für nicht portierte Einheit mit auskommentiertem Code'}
{$WARN NO_RETVAL OFF}
{$WARN USE_BEFORE_DEF OFF}

Ich habe das in allen Einheiten eingefügt, die mir Tonnen von Warnungen geben, aber jetzt, wenn ich kompiliere, gibt der Compiler die folgende Meldung zurück:

[DCC Warnung] unfinished.inc(1): W1054 Warnungen unterdrückt für nicht portierte Einheit mit auskommentiertem Code

Ich hätte gerne, dass er mir sagt, dass die Warnung von der Einheit kommt, die das Einschließen durchführt, und nicht von der Include-Datei selbst. Gibt es einen Weg das zu tun, oder den Namen der Einheit in die Meldung einzufügen, ohne tatsächlich die $MESSAGE-Direktive aus der Include-Datei herauszunehmen und in jede einzelne Einheit zu setzen, wo ich das gemacht habe?

14voto

NineBerry Punkte 21846

Hier ist ein Trick, der darauf basiert, dass der Compiler-Hinweis für "unbenutzte private Methoden" den Namen der Einheit enthält, in der die Klasse deklariert ist, selbst wenn die Klasse mit der privaten Methode in einer Include-Datei deklariert ist.

Dies erfordert, dass die Include-Direktive für Ihre Include-Datei an einer Stelle in der Einheit vorhanden ist, an der Deklarationen erlaubt sind, also entweder nach der uses-Klausel im Interface-Abschnitt oder nach der uses-Klausel im Implementierungsabschnitt.

interface

uses Foo, Bar, Socks;

{$include Unfinished.inc}

Ihre Include-Datei sollte so aussehen:

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

Jetzt erhalten Sie die folgenden beiden Meldungen für jede Einheit, die diese Include-Datei enthält:

[DCC Warning] unfinished.inc(1): W1054 Warnings suppressed for unported unit with commented-out code, Unit name see next line
[DCC Hint] actualunitname.pas(5): Das private Symbol UnitWithSuppressedWarnings wurde deklariert, aber nie verwendet.

Beachten Sie, dass der Name der tatsächlichen Einheit in der zweiten Zeile erscheint.

Bemerkung: Sie sehen die zweite Zeile nicht, wenn Compiler-Hinweise ausgeschaltet sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X