Basis van programmeren in C

#ifndef SENSOR_H
#define SENSOR_H
typedef struct { int id; int value; } Sensor;
int sensor_read(Sensor *s);
#endif

Het headerbestand sensor.h is geschreven zoals hierboven. Wat is het doel van de drie regels #ifndef, #define en #endif?

  1. AHet resultaat van het compileren van de header in een bestand opslaan, zodat het compileren van andere bronbestanden die dezelfde header gebruiken sneller gaat
  2. BAlleen bronbestanden die SENSOR_H definiëren, deze header laten gebruiken
  3. CDe inhoud maar één keer opnemen, ook als dezelfde header meerdere keren in één bronbestand wordt ingevoegd (include), zodat fouten door dubbele definities worden voorkomen
Antwoord en toelichting tonen

Antwoord: C. De inhoud maar één keer opnemen, ook als dezelfde header meerdere keren in één bronbestand wordt ingevoegd (include), zodat fouten door dubbele definities worden voorkomen

Als a.h en b.h allebei sensor.h invoegen en een bronbestand a.h en b.h invoegt, wordt de inhoud van sensor.h twee keer opgenomen. De eerste keer wordt SENSOR_H gedefinieerd, dus de tweede keer is de voorwaarde #ifndef SENSOR_H onwaar en wordt alles tot #endif overgeslagen. Zonder dit mechanisme zou het struct-type Sensor twee keer worden gedefinieerd en een compileerfout geven. Dit idioom heet een include guard, en bij veel compilers kan #pragma once voor hetzelfde doel worden gebruikt.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Basis van programmeren in C

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