Citat:
Ursprungligen postat av
christery
Föreslog det inte, påpekade att det finns. Break använder jag i switch/case men inte i loopar heller.
Fan vad du var snarstucken, tror goto har funnits med sen K&R så det är inte jag som hittat på det.
Ja, och man bör alltid komma ihåg att sätta
break efter varje
case statement i en
switch,
Switch har annars som default (förutbestämt) beteende att exekveras på
fall-through sättet.
Ja, jo
goto hör till en äldre programmeringsteknik, som tex i Algol, FORTRAN 77 mfl,
syntaxen är
goto <label>; Med hjälp av
goto kan man konstruera vedervärdiga styggelser till programkod som ingen kan förstå. Jag kan nog påstå att de flesta kompilatorer för C klarar ej av att varna om möjliga oändliga loopar ifall man använder
goto.
goto togs antagligen med i C för att man skulle kunna översätta gammal kod i något äldre språk till C utan att behöva göra många ändringar.
goto användes innan måsvingarna (engelska curly brackets) fanns, eller tex i
Simula där blocken inneslutes mellan
BEGIN och
END,
Här är ett exempel på en oändlig loop i C:
Kod:
int i = 0;
label: i++;
goto label;
goto i loopar liksom
break eller
continue eller
return kan i vissa fall medföra att man sparar några CPU-cykler jämfört med att skriva en traditionell loop.
goto svarar i assembler mot jmp instruktionen och om man använder
gotos i
C så blir koden mer snarlik den assembler kod som genererats
goto i C har faktiskt använts på assembler studiekurser för att skriva program i C som sen har kompilerats till assemblerkod, man har sedan studerat hur man gör ändringar i koden och vad som då händer. Mycket lärorikt faktiskt.
Break bör bara användas inne i typ loopar eller i switchar annars har det ibland ingen effekt alls, tex i följande kod har
break ingen verkan alls, (ska inte ha iallafall):
Kod:
int main(void)
{
printf("Hello World !! ");
break;
printf("Hello World !! ");
break;
printf("Hello World !! ");
break;
return 0;
}
Detta på grund av att vi redan är på den högsta nivåen av curly-brackets, måsvingarna,
break kan alltså inte medföra ett hopp ur
main.
Det finns en del olika skolor om
break och debugging, de flesta menar att
break statementet ska stå på en egen rad för att underlätta för debuggern, att man verkligen ser återhoppet.
enowen är i sin fulla rätt att känna sig snarstucken när gotos förs på tal,
---goto är väl det största tabuet sedan kunskapens träd i Edens lustgård, skulle jag tro ?
Man menar att
goto är tabu, a very big NO-NO, aja-baja eftersom sådana program blir svåra att ändra i och att det inte uppmuntrar tilll att skriva mera strukturerad kod.
Goto finns dock kvar utav den anledningen att C ska vara bakåtkompatibelt mot äldre kod.
Felstavade
labels var en annan anledning till att
goto avskyddes, om en
label stavas fel i koden så varnar i regel inte kompilatorn för detta, utan den som ska testköra koden sen ser inte anledningen till att hoppet inte genomförs, och det kan då bli otroligt svårfunna buggar om det är många
labels och
gotos.