2016-06-30 30 views
3

Ich möchte die nicht initialisierten Variablen in meinem haben gnatcheck zu berichten, aber das Format dieser Warnung ist mit dem Format nicht kompatibel:Wie wird -Wuninitialized in einem gnatcheck-Bericht hinzugefügt?

+RWarnings:xxxx (mit xxxx den Schaltern differents Warnungen)

Ich habe versucht, dies zu schreiben Programmierregeln wie die anderen: +RWuninitialized aber es funktioniert nicht.

Und der Schalter -Wuninitialized existiert nicht für gnatcheck.

Antwort

3

Die documentation zum Addieren der Ergebnisse der Compiler prüft Gnatcheck ‚s Ausgabe sagt über Warnungen (mit einigen Bearbeitung)

Compiler-Warnungen Zur Aufzeichnung (Abschnitt Nachrichtensteuerung Warnung in GNAT-Benutzerhandbuch), Verwenden Sie die Warnungsregel mit einem gültigen Parameter static_string_ Ausdruck des GNAT-Pragma Warnungen (siehe "Pragma Warnungen" im GNAT-Referenzhandbuch). Beachten Sie, dass [die] bei gnatcheck s Parameter, die auf die GNAT -gnatws Option entspricht, um alle entsprechenden Warnungen deaktiviert, aber [ist] Unterdrückung nicht es den Warnmodus, und [der] e Parameter, entsprechend -gnatwe das bedeutet "Warnungen als Fehler behandeln", hat keine Auswirkungen.

Wenn du gehst „Pragma Warnungen“ zu sehen in der GNAT Reference Manual, finden Sie es Sie aus dem Compiler sendet:

Die Zeichenfolge ist eine Liste von Buchstaben anzugeben, die zu Warnungen Der Code für diese Buchstaben ist derselbe wie der String, der in dem Befehlszeilenschalter verwendet wird, der Warnungen steuert [-gnatw] Für eine kurze Zusammenfassung verwenden Sie den gnatmake-Befehl ohne Argumente, der Nutzungsinformationen erzeugt, die die Liste enthalten von Warnschaltern unterstützt

Diesem Hinweis folgend, scheint es keine -gnatwx zu geben, um Ihnen den Effekt von -Wuninitialized zu geben. Wenn Sie jedoch auf alle Warnungen drehen

project Checks is 
    for Source_Files use ("checks.adb"); 
    package Check is 
    for Default_Switches ("ada") use 
    (
     "-rules", 
     "+RWarnings:.e" 
    ); 
    end Check; 
end Checks; 

und führen Sie es auf

procedure Checks (Input : Integer; Result : out Integer) is 
    X : Integer; 
    Y : Integer; 
    Z : Integer; 
begin 
    if (Y > 0) = True then 
     Result := X; 
    end if; 
end Checks; 

erhalten Sie

checks.adb:1:19: warning: formal parameter "Input" is not referenced 
checks.adb:2:04: warning: variable "X" is read but never assigned 
checks.adb:3:04: warning: variable "Y" is read but never assigned 
checks.adb:4:04: warning: variable "Z" is never read and never assigned 
checks.adb:6:15: warning: comparison with True is redundant 

wo die Warnungen auf den Leitungen 2, 3 (und 4) bedeuten die gleiche als "nicht initialisiert", denke ich.

Sie können dann die Warnungen deaktivieren, die Sie nicht möchten; Beispiel: "+RWarnings:.eF” "deaktiviert Warnungen für nicht referenzierte formale" und unterdrückt die Warnung in Zeile 1.

+0

Es gibt einen deutlichen Unterschied zwischen -gnatwe und -Wuninitialized: In einem langen Verfahren können Sie eine nicht initialisierte Variable und nach dem Affekt erstellen ein Wert, so dass die -gnatwe diese Warnung nicht erkennt. Aber dank dir verstehe ich das ganze Problem! – user1111

+0

'-gnatwe' bedeutet" behandle alle Warnungen als Fehler "; -gnatw.e "bedeutet, dass" alle Warnungen, auch wirklich obskure, eingeschaltet werden "(ich paraphrase :). Für die meisten Zwecke ist "-gnatwa" in Ordnung. –