Aktiviert oder deaktiviert bestimmte Warnungen, die auf mögliche Fehler vonseiten des Programmierers hinweisen, wie z.B. Schreibfehler oder fehlende "globale" Deklarationen.
#Warn WarnungTyp, WarnungModus
Typ: Zeichenkette
Wenn weggelassen, wird standardmäßig All verwendet. Andernfalls geben Sie den Typ der Warnung an, die aktiviert oder deaktiviert werden soll.
VarUnset: Zeigt vor Beginn der Skriptausführung eine Warnung an, wenn die jeweils erste Referenz zu einer Variable nie auf eine der folgenden Arten verwendet wird:
MeineVar := ""
.&MeineVar
.IsSet(MeineVar)
.LocalSameAsGlobal: Zeigt vor Beginn der Skriptausführung eine Warnung an, wenn undeklarierte lokale Variablen den gleichen Namen wie globale Variablen haben. Diese Warnung soll Fehler vermeiden, die auftreten können, wenn vergessen wurde, eine globale Variable innerhalb einer Funktion vor dem Zuweisungsversuch zu deklarieren. Wenn die globale Variable tatsächlich lokal sein soll, kann die Warnung mit einer Deklaration wie local x
oder static y
unterdrückt werden.
Diese Warnung ist standardmäßig deaktiviert.
#Warn g := 1 ShowG() { ; Die Warnung wird auch angezeigt, wenn die Funktion nicht aufgerufen wird. ;global g ; <-- Dies wird für die Zuweisung an die globale Variable benötigt. g := 2 } ShowG MsgBox g ; Ohne die Deklaration hat obiges einem lokalen "g" zugewiesen.
Unreachable: Zeigt vor Beginn der Skriptausführung eine Warnung an, wenn unmittelbar nach einem Return
, Break
, Continue
, Throw
oder Goto
eine Zeile auf gleicher Verschachtelungsebene folgt, es sei denn, diese Zeile ist das Ziel eines Labels. Zeilen dieser Art werden niemals ausgeführt.
Wenn der Code nicht erreichbar sein soll - z.B. wenn ein return
verwendet wurde, um einen Codeblock vorübergehend zu deaktivieren, oder wenn ein Hotkey oder Hotstring durch Auskommentieren vorübergehend deaktiviert wurde - sollten Sie in Erwägung ziehen, den nicht erreichbaren Code ebenfalls auszukommentieren. Sie können die Warnung auch unterdrücken, indem Sie ein Label über der ersten nicht erreichbaren Zeile definieren.
All: Wendet den angegebenen WarnungModus auf alle unterstützten Warnungstypen an.
Typ: Zeichenkette
Wenn weggelassen, wird standardmäßig MsgBox verwendet. Andernfalls geben Sie einen Wert an, der festlegt, wie Warnungen übermittelt werden sollen.
MsgBox: Zeigt ein Mitteilungsfenster an, das die Warnung beschreibt. Beachten Sie, dass das Skript nach dem Schließen des Mitteilungsfensters normal weiterläuft.
StdOut: Sendet eine Beschreibung der Warnung zur Standardausgabe (stdout), inklusive Dateiname und Zeilennummer. Auf diese Weise können umfangreiche Texteditoren wie SciTE die Warnungen abfangen, ohne das Skript zu unterbrechen - der Benutzer kann später den Ausgabebereich des Texteditors verwenden, um zu einer fehlerhaften Zeile zu springen.
OutputDebug: Sendet eine Beschreibung der Warnung zum Debugger, um sie anzuzeigen. Wenn kein Debugger aktiv ist, hat dieser Modus keinen Effekt. Weitere Details finden Sie unter OutputDebug.
Off: Deaktiviert alle Warnungen für den angegebenen WarnungTyp.
Wenn diese Direktive im Skript nicht angegeben ist, sind alle Warnungen aktiviert und verwenden den MsgBox-Modus, mit Ausnahme der LocalSameAsGlobal-Warnung, die deaktiviert ist.
Die Überprüfungen, die VarUnset-, LocalSameAsGlobal- und Unreachable-Warnungen erzeugen, werden durchgeführt, nachdem alle Direktiven geparst wurden, aber bevor das Skript ausgeführt wird. Folglich ist die Position der Direktive innerhalb des Skripts ohne Bedeutung (und kann wie alle anderen Direktiven nicht bedingt ausgeführt werden).
Die Anordnung der #Warn-Direktiven ist allerdings entscheidend: die letzte Direktive, die eine bestimmte Warnung setzt, bestimmt den Modus dieser Warnung. Zum Beispiel haben die beiden unteren Direktiven den kombinierten Effekt, alle Warnungen außer LocalSameAsGlobal zu aktivieren:
#Warn All #Warn LocalSameAsGlobal, Off