#Warn [v1.0.95.00+]

Aktiviert oder deaktiviert Warnungen, die angezeigt werden, wenn Fehler wie Schreibfehler oder fehlende "globale" Deklarationen erkannt wurden.

#Warn [, Warnungstyp, Warnungsmodus]

Parameter

Warnungstyp

Die Art der Warnung, die aktiviert oder deaktiviert werden soll. Fehlt dieser Parameter, gilt standardmäßig All.

UseUnsetLocal oder UseUnsetGlobal: Sie werden gewarnt, wenn eine Variable gelesen wird, die vorher weder einen Wert zugewiesen bekommen hat noch via VarSetCapacity initialisiert wurde. Wenn die Variable absichtlich leer sein soll, weist man ihr eine leere Zeichenkette zu, um diese Warnung zu unterdrücken.

Dieser Warnungstyp wurde für lokale und globale Variablen aufgeteilt, weil globale Variablen aufgrund ihrer persistenten und skriptweiten Art in der Regel nicht initialisiert werden. Dies könnte der Grund sein, warum einige Skriptautoren diese Art der Warnung nur für lokale Variablen aktivieren wollen.

#Warn
;y := ""  ; Dies würde die Warnung unterdrücken.
x := y    ; y hat keinen Wert zugewiesen bekommen.

UseEnv: Sie werden gewarnt, wenn das Skript automatisch eine Umgebungsvariable anstelle einer leeren Skriptvariable nutzt. Das kann passieren, wenn der Name einer Umgebungsvariable zufällig mit dem Namen einer Skriptvariable übereinstimmt. Diese Warnung erscheint, sobald das Skript auf die Variable zugreift, aber nicht, wenn #NoEnv im Skript angegeben ist (aus mehreren Gründen empfohlen).

#Warn
;#NoEnv             ; Fügen Sie dies hinzu, wenn "temp" nicht als Umgebungsvariable gedacht ist.
;EnvGet temp, TEMP  ; Dies würde den Wert der Umgebungsvariable in eine Skriptvariable kopieren.
temp := ""          ; Trotz dieser Zeile scheint temp immer noch einen Wert zu haben.
MsgBox % temp       ; Dies greift auf die Umgebungsvariable "TEMP" zu.

LocalSameAsGlobal: Bevor das Skript seine Ausführung beginnt, werden Sie gewarnt, wenn undeklarierte lokale Variablen den gleichen Namen haben wie globale Variablen. Diese Warnung soll Fehler vermeiden, die auftreten können, wenn man vergessen hat, eine globale Variable innerhalb einer Funktion vor dem Zugriffsversuch 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.

#Warn
g := 1
ShowG() {       ; Die Warnung wird sogar angezeigt, wenn die Funktion nicht aufgerufen wird.
    ;global g   ; <-- Dies ist erforderlich, um auf die globale Variable zuzugreifen.
    MsgBox % g  ; Ohne Deklaration ist "g" eine leere lokale Variable.
}

All: Wendet den angegebenen Warnungsmodus auf alle unterstützten Warnungstypen an.

Warnungsmodus

Ein Wert, der angibt, wie Warnungen übermittelt werden sollen. Fehlt dieser Parameter, gilt standardmäßig MsgBox.

MsgBox: Zeigt ein Mitteilungsfenster an, das die Warnung beschreibt. Beachten Sie, dass, sobald das Fenster geschlossen wird, das Skript wie gewohnt weiterläuft.

StdOut [v1.1.04+]: Sendet eine Beschreibung der Warnung zur Standardausgabe (stdout), inklusive Dateiname und Zeilennummer. So können umfangreiche Texteditoren wie SciTE die Warnungen abfangen, ohne das Skript zu unterbrechen - der Benutzer kann später den Ausgabebereich des Texteditors nutzen, um auf eine fehlerhafte Zeile zu springen.

OutputDebug: Sendet eine Beschreibung der Warnung zum Debugger, um sie anzuzeigen. Wenn kein Debugger aktiv ist, hat das Senden keine Auswirkung. Weitere Details finden Sie unter OutputDebug.

Off: Deaktiviert alle Warnungen für den angegebenen Warnungstyp.

Bemerkungen

Standardmäßig sind alle Warnungen deaktiviert.

Warnungen können weder aktiviert noch deaktiviert werden, während das Skript läuft; die Einstellungen werden beim Laden des Skripts festgelegt. 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. Die zwei unteren Anweisungen beispielsweise haben den kombinierten Effekt, dass alle Warnungen außer UseEnv aktiviert werden:

#Warn All
#Warn UseEnv, Off

EnvSet EnvVar, 1
x := EnvVar       ; Okay, da #NoEnv nicht verwendet wurde.
x := NotAnEnvVar  ; Warnung.

Siehe auch

Lokale und globale Variablen

Beispiel

#Warn All, Off                    ; Deaktiviert alle Warnungen.  Das ist der voreingestellte Zustand.
#Warn                             ; Aktiviert alle Warnungstypen; zeigt alle Warnungen in einem Mitteilungsfenster an.
#Warn UseUnsetLocal, OutputDebug  ; Warnt bei einer leeren lokalen Variable; sendet Warnung zum OutputDebug.