Basis van programmeren in C
#define SQUARE(x) x * x
int a = 3;
printf("%d\n", SQUARE(a + 1));Wat is de uitvoer als de bovenstaande code, die de met #define gedefinieerde macro SQUARE gebruikt, wordt uitgevoerd?
- A7
- B10
- C16
Antwoord en toelichting tonen
Antwoord: A. 7
Een macro is alleen een tekstvervanging door de preprocessor. SQUARE(a + 1) wordt geëxpandeerd tot a + 1 * a + 1, en de vermenigvuldiging wordt eerst berekend, wat 3 + 3 + 1 = 7 geeft. Om het bedoelde kwadraat van (a + 1), 16, te krijgen, worden haakjes rond het argument en de hele body gezet, zoals in #define SQUARE(x) ((x) * (x)). Zelfs dan evalueert een argument met neveneffecten, zoals SQUARE(i++), i++ twee keer en wordt het ongedefinieerd gedrag, dus kan in plaats daarvan een inline functie worden gebruikt.