Compilers
In C is overflow van gehele getallen met teken ongedefinieerd gedrag. Welke code kan een compiler die de bovenstaande functie optimaliseert op deze grondslag genereren?
int f(int x) {
return x + 1 > x;
}
- AEen vergelijkingsinstructie die altijd blijft staan zodat alleen bij het maximum van x 0 wordt teruggegeven
- BCode die altijd 1 teruggeeft
- COmdat het ongedefinieerd gedrag bevat, wordt het compileren afgebroken met een foutmelding
Antwoord en toelichting tonen
Antwoord: B. Code die altijd 1 teruggeeft
Overflow van gehele getallen met teken is ongedefinieerd gedrag, zodat de compiler mag aannemen dat in correcte programma's geen overflow optreedt. Onder die aanname is x + 1 altijd groter dan x, zodat de vergelijking kan worden weggelaten en code die altijd 1 teruggeeft kan ontstaan. Code die bij het maximum van x 0 verwacht, werkt door deze optimalisatie soms niet meer zoals verwacht. Ongedefinieerd gedrag wordt tijdens het compileren vaak niet gedetecteerd en leidt niet tot een foutmelding.