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?

  1. A7
  2. B10
  3. 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.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. Het headerbestand sensor.h is geschreven zoals hierboven. Wat is het doel van de drie regels #ifndef, #define en #endif?
  2. Wat is de uitvoer als de bovenstaande code binnen de functie main wordt geschreven en uitgevoerd?
  3. Een uitgangsregister van een microcontroller wordt gedeclareerd en gebruikt zoals hierboven. Welke beschrijving van deze declaratie is juist?
  4. Welke beschrijving van ongedefinieerd gedrag in de zin van de C-standaard is juist?
  5. int en unsigned int zijn 32 bits. Welke van de volgende bewerkingen is volgens de C-standaard ongedefinieerd gedrag?