Gå til innhold

Kan noen se litt på denne?


Anbefalte innlegg

Det var også fordi jeg syns det var å sløse litt, det er jo ikke noen grunn til å fortsette å gå gjennom to tabeller hvis jeg allerede har funnet det jeg lette etter, og det ikke var noen flere koordinater med samme navn. Men det kan jo være greit(som Myubi sa) å ta med evt. andre koordinater som har navn. :)

Lenke til kommentar
Videoannonse
Annonse
Legg inn en label etter den ytre loopen du, og bruk goto. Blir stygt å hoppe til et vilkårlig sted i koden, men for å bare komme ut av en nestet loop er vel goto en del klarere enn å endre variabler eller whatever..

 

Er jo som regel bedre å ordne koden slik at man slipper bruke goto, men i noen tilfeller er det beste løsning.

jeg kan ennå ikke si at jeg har kommet til et punkt der jeg har funnet ut "hmm... her er nok goto beste alternativ"... å si dette til en programvareutvikler er som å banne i kirken...

Lenke til kommentar

Hm,

Hvis det er meningen at den -ikke- skal søke videre når den har funnet et treff er det jo greit å sette i og k til 100 (og coord_found til true i samme slengen) som en nevnte ovenfor her?

 

(Mulig jeg har misforstått og det -er- meningen at du vil søke videre etter flere treff? Det kommer ikke helt klart frem i trådstarters siste post synes jeg ..)

Endret av søppel
Lenke til kommentar
Hm,

Hvis det er meningen at den -ikke- skal søke videre når den har funnet et treff er det jo greit å sette i og k til 100 (og coord_found til true i samme slengen) som en nevnte ovenfor her?

Men blir ikke "goto endOfLoop" veldig mye klarere enn å skrive "i=100; break;"?

 

Kan selvsagt gjøre det dønn umulig å forstå programflyten om man misbruker goto, men akkurat for å bryte seg ut av nestede loops er det som sagt ofte beste alternativ.

Ekte programvareutviklere er ikke redd for å bruke et 'fy-ord' hvis det gjør koden lettere å lese. :p

Endret av Frank2004
Lenke til kommentar

Kort om 'goto'-funksjonen

 

Funksjonen goto vi finner i C++ er der av samme grunn som i C, dvs. det er egentlig ikke noe grunn til å ha den.

 

I C-boken til Kernighan og Ritchie Står det at all kode kan skrives uten goto, og de ikk har brukt funksjonen i eksemplene som er gitt i boken. Det er vanskeligere å forstå koden som bruker goto en kode som ikke bruker det.

 

Det er allikevel enkelte situasjoner det kan være nyttig. F.eks. hvis en funksjon har flere if-tester og resultatet er at en standard feilbehandling skal gjennomføres kan det være en god løsning. Spesielt hvis testene ligger inni mange funksjonsblokker ved flere steder kan det være bedre med en 'goto error,' enn å krongle seg ut.

 

Ref: K&R: The C Programming Language

 

I C++ har vi noe som heter exceptions som er et langt bedre alternativ til 'goto error', men det er _litt_ mer komplisert å lære.

Lenke til kommentar

Ble litt nysjerrig, og sjekket hvor mange forekomster av "goto" det er i kildekoden til Linux (versjon 2.6.6):

 

# find . -name '*.c' -o -name '*.h' -depth | xargs grep 'goto' | nl

    1 ./drivers/s390/net/qeth.c:  goto out;

    2 ./drivers/s390/net/qeth.c:    goto out;

    3 ./drivers/s390/net/qeth.c:  goto out;

    4 ./drivers/s390/net/qeth.c:  goto out;

    5 ./drivers/s390/net/qeth.c:  goto out;

    6 ./drivers/s390/net/qeth.c:  goto out;

    7 ./drivers/s390/net/qeth.c:  goto out;

 

..........O.S.V..........

 

26729 ./crypto/sha512.c:                goto out;

26730 ./crypto/cipher.c:      goto out;

26731 ./crypto/api.c:  goto out;

26732 ./crypto/api.c:  goto out_put;

26733 ./crypto/api.c:  goto out_free_tfm;

26734 ./crypto/api.c:  goto out_free_tfm;

26735 ./crypto/api.c: goto out;

26736 ./crypto/api.c:  goto out;

26737 ./crypto/api.c:  goto out;

 

Det er med andre ord ca. 25 000 forekomster av 'goto' i koden.

 

Tror ikke jeg ville anbefallt å bruke goto vanligvis uansett. Dette er jo rimelig lav-nivå.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...