gosub cf_return() の記載にしたい理由ってなんだろう。
cf_return() で前処理しつつ、目的のところにサブルーチンジャンプしたいのであれば、自分で命令を作ればいい。
というか、
#defcfunc cf_return
return v_label ;ラベル型変数v_labelを返す
の処理の場合ただラベル変数を返すだけだから、cf_return を ctype に置き換えちゃえばいいだけかと。
下の場合は、ctype に置き換えた場合。
#module VVV//←のモジュール空間名は必ず設定すること。設定する事によって、グローバルからも他のモジュール空間からでもアクセスできるようになる。
#define global ctype cf_return(%1 = 0) VVV@v_label
#global
上記だと、ただサブルーチンジャンプ先の v_label を返すってだけだけど。
あとは、グローバル空間からモジュール空間内のラベルに直接アクセスしちゃう方法
上記 #module でモジュール空間名を設定したので、変数の先頭側に VVV@ をつけるとモジュール空間の変数にアクセスしてって事になる。
#module VVV
#deffunc f_set var p_1
v_label = p_1 ;ラベル型変数をv_labelに代入
return
#defcfunc cf_return
return v_label ;ラベル型変数v_labelを返す
#global
label = *sub_1
f_set label
gosub VVV@v_label //←直接モジュール内ラベル変数を指定している。
stop
*sub_1
dialog "1です"
return
などなど。cf_return() で前処理ありの場合とかは、cf_return() 内部から gosub しちゃうって手も。