Syntaxe

Exécute le sous-programme qui commence à une étiquette, jusqu'à son RETURN, puis reprend après le GOSUB.

GOSUB <label>
<label>:
  <statements>
RETURN

S’écrit aussi : RETURN

Les éléments

<label>Le nom du sous-programme, écrit <label>: seul sur sa ligne. La casse est sans importance.
<statements>Le corps du sous-programme.

À savoir

  • Un sous-programme partage toutes les variables du programme. Il n'a ni paramètres ni variables locales : écrivez une FUNCTION quand il en faut.
  • Un sous-programme a un seul RETURN, à la fin. Un RETURN anticipé dans un IF casse le programme : sur une ligne, il s'arrête sur une erreur ; dans un IF en bloc, le compilateur coupe le sous-programme à cet endroit et le reste du programme disparaît sans message. Mettez plutôt la suite du sous-programme dans le IF.
  • Le programme principal n'entre jamais par accident dans un sous-programme : un END oublié avant les étiquettes ne fait pas de dégât. Une étiquette sans RETURN continue dans l'étiquette suivante, dont le RETURN ramène au GOSUB.
  • Un GOSUB vers une étiquette absente est une erreur de compilation : "Unknown BASIC label". Une étiquette qui termine une chaîne sans RETURN aussi : "BASIC label … requires RETURN".
  • Un sous-programme qui appelle Sync(), Wait() ou YieldTask() attend des images. C'est permis dans un programme avec une boucle DO, dans un programme avec un END seul sur sa ligne, ou depuis un autre sous-programme qui attend.
  • ON … GOSUB n'est pas pris en charge : utilisez SELECT avec un GOSUB par CASE. END dans un sous-programme arrête tout le programme. Dans une FUNCTION, RETURN quitte la fonction.

Exemple

score = 10GOSUB AddBonusGOSUB AddBonusConsole(Str(score))   ' 30ENDAddBonus:  score = score + 10RETURN
Dans le manuel : Contrôle du flux