Basis van programmeren in C

#define DEBUG 0
#ifdef DEBUG
    printf("A\n");
#endif
#if DEBUG
    printf("B\n");
#endif

Wat is de uitvoer als de bovenstaande code binnen de functie main wordt geschreven en uitgevoerd?

  1. AAlleen A wordt afgedrukt
  2. BEr wordt niets afgedrukt
  3. CA en B worden afgedrukt
Antwoord en toelichting tonen

Antwoord: A. Alleen A wordt afgedrukt

#ifdef DEBUG controleert alleen of een macro met de naam DEBUG is gedefinieerd, niet de waarde ervan. DEBUG is gedefinieerd met de waarde 0, dus de voorwaarde is waar en het statement dat A afdrukt, wordt gecompileerd. #if DEBUG controleert de waarde, die 0 is, dus de voorwaarde is onwaar en het statement dat B afdrukt, wordt verwijderd. Bij het in- en uitschakelen van debugcode ontstaan zulke tegenstrijdigheden als niet consequent #ifdef of #if voor de test wordt gebruikt.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

  1. Een uitgangsregister van een microcontroller wordt gedeclareerd en gebruikt zoals hierboven. Welke beschrijving van deze declaratie is juist?
  2. Welke beschrijving van ongedefinieerd gedrag in de zin van de C-standaard is juist?
  3. int en unsigned int zijn 32 bits. Welke van de volgende bewerkingen is volgens de C-standaard ongedefinieerd gedrag?
  4. Als de bovenstaande functie met gcc met ingeschakelde optimalisatie wordt gecompileerd, kan de controle if (p == NULL) worden verwijderd. Wat is de reden?
  5. Wat legt de C-standaard vast over de grootte van het type int?