Grundlagen der Programmiersprache C
#ifndef SENSOR_H
#define SENSOR_H
typedef struct { int id; int value; } Sensor;
int sensor_read(Sensor *s);
#endifDie Header-Datei sensor.h wurde wie oben geschrieben. Welchen Zweck haben die drei Zeilen #ifndef, #define und #endif?
- ADas Ergebnis der Kompilierung des Headers wird in einer Datei gespeichert, um das Kompilieren anderer Quelldateien mit demselben Header zu beschleunigen
- BNur Quelldateien, die SENSOR_H definiert haben, können diesen Header verwenden
- CAuch wenn derselbe Header mehrfach in eine Quelldatei eingebunden wird, wird sein Inhalt nur einmal übernommen, sodass Fehler durch doppelte Definitionen vermieden werden
Antwort und Erläuterung anzeigen
Antwort: C. Auch wenn derselbe Header mehrfach in eine Quelldatei eingebunden wird, wird sein Inhalt nur einmal übernommen, sodass Fehler durch doppelte Definitionen vermieden werden
Binden a.h und b.h beide sensor.h ein und bindet eine Quelldatei a.h und b.h ein, wird der Inhalt von sensor.h zweimal übernommen. Beim ersten Mal wird SENSOR_H definiert, daher ist die Bedingung von #ifndef SENSOR_H beim zweiten Mal falsch, und alles bis #endif wird übersprungen. Ohne diesen Mechanismus würde der struct-Typ Sensor zweimal definiert, was einen Kompilierfehler ergibt. Diese Schreibweise heißt Include-Guard; viele Compiler unterstützen für denselben Zweck auch #pragma once.
Weiter: 9 weitere Fragen zu Grundlagen der Programmiersprache C