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!