Zweck:Führen Sie eine Unterroutine in der aktuellen Batchdatei aus

 

Format:GOSUB ["Dateinamen"] Etikette [Variablen]

 

DateinamenDie Datei, die das Unterprogramm enthält
EtiketteDie Bezeichnung der Batchdatei am Anfang der Unterroutine.
VariablenOptionale GOSUB-Variablen.

 

Siehe auch: Anrufen, GOTO und RÜCKKEHR.

 

Syntax zur Dateivervollständigung:

 

Der Standard Dateinamenvervollständigung Syntax ist: [1] dirs btm cmd bat [2*] *

 

Verwendung:

 

GOSUB kann nur in Batchdateien verwendet werden.

 

TCC ermöglicht Unterroutinen in Batchdateien. Eine Unterroutine muss mit a beginnen Etikette (ein Doppelpunkt [:] gefolgt von einem Labelnamen), der in einer eigenen Zeile erscheint und nicht eingefügt werden kann Befehlsgruppe. Unterschiede in der Groß- und Kleinschreibung werden beim Abgleichen von Beschriftungen ignoriert. Das Unterprogramm sollen enden mit a RÜCKKEHR Aussage.

 

Das Unterprogramm wird mit einem GOSUB-Befehl aus einem anderen Teil der Batchdatei aufgerufen. Nach dem RETURN wird die Verarbeitung mit dem auf den GOSUB-Befehl folgenden Befehl fortgesetzt. Das folgende Batchdateifragment ruft beispielsweise eine Unterroutine auf, die das Verzeichnis anzeigt und Folgendes zurückgibt:

 

echo Aufruf einer Unterroutine

gosub subr1

echo Von der Unterroutine zurückgegeben

verlassen

:subr1

dir /a/w

Rückkehr

 

GOSUB beginnt seine Suche nach dem Etikette in der Zeile der Batchdatei direkt nach dem GOSUB-Befehl. Wenn die Etikette zwischen der aktuellen Position und dem Ende der Datei nicht gefunden wird, startet GOSUB die Suche am Anfang der Datei neu. Wird das Label immer noch nicht gefunden, wird die Batchdatei mit der Fehlermeldung „Etikett nicht gefunden".

 

Sie können GOSUB definieren Variablen, indem Sie sie nach dem Labelnamen in der GOSUB-Zeile platzieren. Zum Beispiel:

 

Gosub Sub1 abc 15 „Hallo Welt“

 

Die Variablennamen werden in der Beschriftungszeile definiert. Zum Beispiel:

 

:Sub1 [str n Welt]

 

definiert drei Variablen - %str (auf „abc“ gesetzt), %n (auf 15 gesetzt) ​​und %Welt (auf „Hallo Welt“ gesetzt). Beachten Sie, dass die eckigen Klammern in der Beschriftungszeile erforderlich sind. GOSUB-Variablen werden nur für die Dauer des Unterprogramms definiert. Sie werden nicht von verschachtelten GOSUBs geerbt und von diesen zerstört RÜCKKEHR Anruf.

 

Wenn Sie an den letzten Variablennamen in der Parameterliste in der Beschriftungszeile ein * anhängen, wird dieser „gierig“ und alle verbleibenden Variablen werden ihm zugewiesen. Zum Beispiel:

 

gosub sub1 eins zwei drei vier fünf

...

:sub1 [arg1 arg2 arg3*]

 

arg3 wird „drei vier fünf“ zugewiesen.

 

Wenn Sie GOSUB-Variablen auf dem Etikett definieren, sie aber nicht in der GOSUB-Zeile angeben, werden sie auf eine leere Zeichenfolge gesetzt.

 

GOSUB-Aufrufe mit Variablen sind auf eine Tiefe von maximal 22 Ebenen beschränkt. Es gibt keine Begrenzung für normale GOSUB-Aufrufe.

 

GOSUB-Variablen werden für die Dauer der Subroutine in einer speziellen Form in der Umgebung platziert und „maskieren“ alle gleichnamigen Umgebungsvariablen, die vor dem Aufruf der Subroutine vorhanden waren. Auf GOSUB-Variablen kann wie auf normale Umgebungsvariablen verwiesen werden, sie werden jedoch nicht auf die gleiche Weise gespeichert und können nicht mit geändert werden SET, ESET, oder UNSET Befehle und können nicht mit dem DEFINED-Test von verwendet werden IF, IFF, oder @WENN.

 

Sie können nicht verwenden SET innerhalb einer Unterroutine, um den Wert einer GOSUB-Variablen zu ändern. Wenn Sie dies versuchen, setzt der SET-Befehl die gleichnamige Standardumgebungsvariable und nicht die GOSUB-Variable. Dieser Wert wird jedoch von der GOSUB-Variablen „maskiert“ und bleibt bis zum Ende der Unterroutine unzugänglich.

 

Sie können ein Unterprogramm in einer anderen Datei aufrufen, indem Sie Folgendes angeben Dateinamen (Der Name muss in doppelte Anführungszeichen gesetzt werden. Dadurch können Sie Bibliotheken mit Unterprogrammen erstellen, ohne diese in jeder Batchdatei duplizieren zu müssen. Beispiel:

 

gosub „c:\library\batlib.btm“ Evaluate [%1 %2 %3]

 

GOSUB speichert die IFF- und DO-Zustände, sodass IFF- und DO-Anweisungen innerhalb einer Subroutine nicht mit Anweisungen in dem Teil der Batchdatei in Konflikt geraten, aus dem die Subroutine aufgerufen wurde. Wenn die Unterroutine ein SETLOCAL ohne passendes ENDLOCAL ausgeführt hat, wird ein ENDLOCAL ausgeführt, bevor zur aufrufenden Batchdatei zurückgekehrt wird.

 

Sie können nicht RÜCKKEHR von einem GOSUB während in a DO Schleife.

 

If TCC das Ende der Batchdatei erreicht, während er sich in einer Unterroutine befindet, kehrt er automatisch zum Befehl nach dem GOSUB zurück, genau wie bei einem expliziten Befehl RÜCKKEHR Der Befehl wurde als letzte Zeile der Datei eingefügt.

 

Unterprogramme können verschachtelt werden.

 

Siehe auch: benutzerdefinierte Funktionen.