GOSUB
GOSUB サブルーチンの呼び出し(制御命令)
書式
GOSUB 行番号
GOSUB "ラベル"
説明
プログラムの実行を一旦、行番号またはラベルで指定した行に移ります。
移った先でRETURN命令により、呼び出したGOSUB命令の次の位置に戻ります。 行番号には数値、式(変数、関数を含む)が利用できます。
ラベルを指定した場合は、行先頭に同じラベルがある行に移ります。
ラベルはダブルクオテーション( " )で囲って指定します。
code:gosub_sample.bas
10 GOSUB "PRN_LOGO"
20 GOSUB "PRN_DATE"
30 GOSUB 200
40 END
50 "PRN_LOGO"
60 PRINT "Tiny BASIC for Arduino STM32"
70 RETURN
80 "PRN_DATE"
90 PRINT "Edition V0.84 2017/08/01"
100 RETURN
200 PRINT "Ready"
210 RETURN
上記の例では、10行、20行でラベルを指定してサブルーチンを呼び出しています。
30行では、行番号を指定してサブルーチンを呼び出しています。
ラベルを使うことで、プログラムの実行がわかりやすくなります。
行の先頭に無いラベルは、GOSUB文の呼び出し先としての参照はされません。
code:gosub_sample2.bas
10 GOSUB "hoge"
20 END
30 ? "Hello":"hoge":?"test":RETURN
run
Undefined line number or label in 10
10 GOSUB "hoge"
OK
行番号には式や変数の指定が可能ですが、RENUMコマンドよる行番号付け替えに対応出来ない場合があります。 ①GOSUB N*100+500
②GOSUB 500+N*100+500
①ではRENUMコマンドは何もしません。②は500を行番号とみなして更新します。 ただし①②とも計算結果が正しい行番号となることは保証出来ません。ご注意下さい。
エラーメッセージ
Undefined line number or label :指定した行、ラベルが存在しない
Overflow :指定した数値が-32768 ~ 32767を超えている
GOSUB too many nested :GOSUBのネスト数が規定(=10)を超えた
Syntax error :文法エラー、書式と異なる利用を行った
利用例
ラベルを使ったサブルーチンの呼び出し例
code:gosub_sample3.bas
100 GOSUB "SUB01"
110 GOSUB "SUB02"
120 N=0
130 "LOOP"
140 PRINT "N=";N
150 N=N+1:IF N<5 GOTO "LOOP"
160 END
170 "SUB01":PRINT "SUB01":RETURN
200 "SUB02":PRINT "SUB02":RETURN
関連項目