Lähes kaikissa ohjelmointikielissä on goto- lause, mutta usein strukturoidun ohjelmoinnin kannattajat ovat julistaneet sen pannaan. Julistus on aivan hyvä, sillä ainakin 90% tapauksista, joissa goto- lausetta tekisi mieli käyttää, voidaan korvata strukturoidummalla tavalla.
Seuraavissa tapauksissa goto- lause voidaan hyväksyä:
1. silmukan suorituksen katkaisu 2. aliohjelman loppuun hyppääminen (silloin kun returnia ei lopetustoimenpiteiden vuoksi voida käyttää) 3. jos strukturoitu rakenne on selvästi monimutkaisempi
Mikäli yhteen aliohjelmaan tulee useita goto - lauseita, on rakenne selvästikin suunniteltu väärin, ja se on mietittävä uudelleen.
goto - lauseen syntaksiin kuuluu paikan nimi, johon hypätään. Tämä nimiö täytyy esitellä ohjelmassa laittamalla se tarvittavaan kohtaan:
#include <stdio.h>
int main(void)
{
int summa=0,luku;
printf("Anna lukuja. Summaan niitä kunnes annat 0 tai summa > 20\n");
while (summa <= 20) {
printf("Anna luku>");
if ( !scanf("%d",&luku) ) goto luvut_loppu;
if ( luku == 0 ) goto luvut_loppu;
summa += luku;
}
luvut_loppu:
printf("Lukujen summa on %d.\n",summa);
return 0;
}
Siis break ja continue ovat "piilotettuja" goto- lauseita. Mikäli break tai continue pitäisi saada toimimaan 2 tasoa ulospäin, on pakko käyttää goto- lausetta.
Huom! Ensisijaisesti pyri välttämään goto- lauseita!