Basis van programmeren in C
unsigned int i;
for (i = 3; i >= 0; i--)
printf("%u ", i);unsigned int is 32 bits. Welke beschrijving van het gedrag bij het uitvoeren van de bovenstaande code is juist?
- AHet programma drukt 3 2 1 0 af en stopt
- BHet programma drukt 3 2 1 af en stopt
- CNa het afdrukken van 3 2 1 0 stopt het programma niet, maar gaat het door met het afdrukken van afnemende waarden vanaf 4294967295
Antwoord en toelichting tonen
Antwoord: C. Na het afdrukken van 3 2 1 0 stopt het programma niet, maar gaat het door met het afdrukken van afnemende waarden vanaf 4294967295
i is zonder teken en kan dus nooit negatief worden, en de voorwaarde i >= 0 is altijd waar. Als i-- wordt uitgevoerd terwijl i gelijk is aan 0, wordt i weer 2³² − 1 = 4294967295, en de lus stopt niet maar blijft 4294967294, 4294967293 enzovoort afdrukken. Om tot 0 af te tellen, gebruik je int of schrijf je de lus anders, zoals for (i = 4; i-- > 0; ). Met -Wextra geeft gcc een waarschuwing dat deze vergelijking altijd waar is.