Grundlagen der Programmiersprache C

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

Die Header-Datei sensor.h wurde wie oben geschrieben. Welchen Zweck haben die drei Zeilen #ifndef, #define und #endif?

  1. ADas Ergebnis der Kompilierung des Headers wird in einer Datei gespeichert, um das Kompilieren anderer Quelldateien mit demselben Header zu beschleunigen
  2. BNur Quelldateien, die SENSOR_H definiert haben, können diesen Header verwenden
  3. 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.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Grundlagen der Programmiersprache C

  1. Der obige Code steht in der Funktion main. Welche Ausgabe erzeugt er bei der Ausführung?
  2. Bei einem Mikrocontroller wird das Ausgaberegister wie oben deklariert und verwendet. Welche Aussage über diese Deklaration ist richtig?
  3. Welche Aussage beschreibt das undefinierte Verhalten im Sinne des C-Standards richtig?
  4. int und unsigned int haben 32 Bit. Was davon ist nach dem C-Standard undefiniertes Verhalten?
  5. Wird die obige Funktion mit gcc und aktivierter Optimierung kompiliert, kann die Prüfung if (p == NULL) entfernt werden. Was ist der Grund dafür?