#Warn [v1.0.95.00+]

Aktiviert oder deaktiviert Warnungen bei bestimmten Zuständen, die ein Fehler sein könnten, wie Schreibfehler oder fehlende "globale" Deklarationen.

#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: Warnen, wenn das Skript eine Variable liest, die keinen zugewiesenen Wert hat oder per VarSetCapacity initialisiert wurde. Wenn die Variable absichtlich leer sein soll, muss ihr eine leere Zeichenkette zugewiesen werden, um diese Warnung zu unterdrücken.

Warum ist dieser Warnungstyp in Lokal und Global aufgeteilt? Aufgrund der persistenten und skriptweiten Art von globalen Variablen ist es unüblich, diese vorher mit einem Wert zu initialisieren. Deshalb gibt es die Möglichkeit, diesen Warnungstyp für lokale Variablen zu aktivieren, und für globale Variablen zu deaktivieren.

#Warn
;y := ""  ; Das hier würde die Warnung unterdrücken.
x := y    ; y enthält keinen zugewiesenen Wert.

UseEnv: Warnen, wenn das Skript eine leere Variable als Umgebungsvariable verwendet. Das kann passieren, wenn der Name einer Umgebungsvariable zufällig mit dem Namen einer Skript-Variable übereinstimmt. Diese Warnung erscheint, sobald das Skript auf die Variable zugreift. Mit #NoEnv kann dieses Verhalten unterdrückt werden (empfohlen).

#Warn
;#NoEnv             ; Behandelt "temp" nicht als Umgebungsvariable.
;EnvGet temp, TEMP  ; Kopiert den Wert der Umgebungsvariable in eine Skript-Variable.
temp := ""          ; Trotz dieser Zeile hat temp scheinbar weiterhin einen Wert.
MsgBox % temp       ; Diese Zeile greift auf die Umgebungsvariable "TEMP" zu.

LocalSameAsGlobal: Bevor das Skript anfängt zu laufen, wird bei jeder undeklarierten lokalen Variable eine Warnung angezeigt, die den gleichen Namen hat wie eine globale Variable. Diese Warnung soll darauf hinweisen, dass eine globale Variable innerhalb einer Funktion deklariert werden sollte, bevor sie verwendet wird, um Fehler zu vermeiden. 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 auch angezeigt, wenn die Funktion nicht aufgerufen wird.
    ;global g   ; <-- Notwendig, um die globale Variable zu verwenden.
    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 Hinweisfenster an, das die Warnung beschreibt. Beachte, dass, sobald das Fenster geschlossen wird, das Skript wie gewohnt weiterläuft.

StdOut [v1.1.04+]: Sendet eine Beschreibung der Warnung zur Standardausgabe (stdout), einschließlich Dateiname und Zeilennummer. Auf diese Weise können originelle Editoren wie SciTE die Warnungen abfangen, ohne das Skript zu unterbrechen - der Benutzer kann später über den Editor-Bereich "Ausgabe" zu allen fehlerhaften Zeilen springen.

OutputDebug: Sendet eine Beschreibung der Warnung zum Debugger. Ist kein Debugger aktiv, wird nichts passieren. Für weitere Details, siehe 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 bei anderen Direktiven auch, 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. So zum Beispiel haben die zwei unteren Direktiven den kombinierten Effekt, alle Warnungen außer UseEnv zu aktivieren:

#Warn All
#Warn UseEnv, Off

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

Siehe auch

Lokale und globale Variablen

Beispiel

#Warn All, Off                    ; Deaktiviert alle Warnungen.  Das ist der voreingestellte Zustand.
#Warn                             ; Aktiviert jeden Warnungstyp; zeigt jede Warnung als Hinweisfenster.
#Warn UseUnsetLocal, OutputDebug  ; Warnt bei einer leeren lokalen Variable; Sendet Warnung zum OutputDebug.