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;
}
  1. AEen vergelijkingsinstructie die altijd blijft staan zodat alleen bij het maximum van x 0 wordt teruggegeven
  2. BCode die altijd 1 teruggeeft
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Compilers

  1. Welke van de fouten in een programma kan al tijdens het compileren worden gevonden?
  2. Wat is het belangrijkste voordeel van typecontrole door de compiler in een taal met statische types?
  3. Wat wordt vaak gebruikt om de regels voor het herkennen van tokens bij lexicale analyse weer te geven?
  4. Welk soort grammatica wordt gebruikt om de grammatica van veel programmeertalen weer te geven en vormt de basis van parsing?
  5. Welke vorm van de abstracte syntaxisboom van de expressie 2 + 3 * 4 is juist?

Vergelijkingen bij dit onderwerp