De operatoren break en continue worden gebruikt in lusconstructies (for, while, do..while) om de stroom van uitvoering te beheersen.
Fijne punten:
break binnen geneste lussen leidt tot een uitstap alleen uit de meest interne lus.goto kan de logica op complexe manieren worden beïnvloed.continue in while en do..while lussen kan onverwachte overgangen van de controleflow veroorzaken als de volgorde van acties niet wordt overwogen.Voorbeeld:
for (int i = 0; i < 5; ++i) { if (i == 2) continue; if (i == 4) break; printf("%d ", i); } // Zal afdrukken: 0 1 3
Hoe zal de lus zich gedragen met de continue operator als deze complexe expressies gebruikt bij de initialisatie en bijwerking van de teller?
Frequent onjuiste antwoord:
Veel mensen denken dat bij de activering van continue, alle expressies binnen de lusconstructie (bijvoorbeeld de incrementele in for) niet worden uitgevoerd.
Correct antwoord:
In de for lus, bij de bereikbaarheid van continue, wordt het resterende deel van de lichaam van de lus overgeslagen, maar de teller bijwerkingsexpressie (het derde deel van de expressie in for) wordt nog steeds uitgevoerd:
for (int i = 0; i < 3; printf("stap %d ", i), ++i) { if (i == 1) continue; printf("%d ", i); }
Uitgang:
0
stap 0
stap 1
2
stap 2
Geschiedenis
Binnen een lus door een array werd continue gebruikt, en vergeten om de parameter-teller expliciet bij te werken (in een while-lus), wat leidde tot een oneindige lus.
Geschiedenis
Een geneste lus voor het zoeken naar overeenkomsten stopte met break bij de eerste overeenkomst, maar de programmeur verwachtte dat de lus volledig zou stoppen, waardoor de verwerking van de andere elementen niet correct werd uitgevoerd.
Geschiedenis
In de do..while constructie, waar de hoofd lus continue gebruikte, werd een cruciale afsluitende operatie overgeslagen voordat naar de volgende iteratie werd overgegaan, wat leidde tot gegevensverlies door onjuiste wijziging van de toestand binnen het lichaam van de lus.