Compilers
Welke uitspraak over de teruggegeven waarde en de resterende code van de bovenstaande functie is juist wanneer constant propagation, constant folding en verwijdering van dode code voldoende zijn toegepast?
int h(void) {
int a = 5;
int b = a * 3;
int c = b - a;
if (c > 100) return 0;
return c * 2;
}
- AHij geeft altijd 20 terug en de test van het if-statement wordt verwijderd
- BHij geeft altijd 0 terug en return c * 2 wordt verwijderd
- CAlle berekeningen blijven staan en bij uitvoering wordt 20 of 0 teruggegeven
Antwoord en toelichting tonen
Antwoord: A. Hij geeft altijd 20 terug en de test van het if-statement wordt verwijderd
Propagatie van a = 5 geeft b = 5 * 3 = 15 en c = 15 − 5 = 10. Daardoor is de voorwaarde c > 100, dus 10 > 100, altijd onwaar, zodat de tak met return 0 nooit wordt uitgevoerd en als dode code wordt verwijderd. Het resterende return c * 2 is 10 × 2 = 20, en de functie wordt alleen return 20;. Omdat de voorwaarde altijd onwaar is, wordt nooit 0 teruggegeven en hoeft tijdens de uitvoering niet te worden berekend of getest.