Bases de la programmation en C
#ifndef SENSOR_H
#define SENSOR_H
typedef struct { int id; int value; } Sensor;
int sensor_read(Sensor *s);
#endifLe fichier d'en-tête sensor.h est écrit comme ci-dessus. Quel est le rôle des trois lignes #ifndef, #define et #endif ?
- AEnregistrer dans un fichier le résultat de la compilation de l'en-tête, pour accélérer la compilation des autres fichiers source qui utilisent le même en-tête
- BRéserver l'usage de cet en-tête aux seuls fichiers source qui définissent SENSOR_H
- CN'intégrer le contenu qu'une seule fois même si le même en-tête est inclus plusieurs fois dans un fichier source, et éviter ainsi les erreurs de double définition
Afficher la réponse et l'explication
Réponse : C. N'intégrer le contenu qu'une seule fois même si le même en-tête est inclus plusieurs fois dans un fichier source, et éviter ainsi les erreurs de double définition
Si a.h et b.h incluent tous deux sensor.h et qu'un fichier source inclut a.h et b.h, le contenu de sensor.h est intégré deux fois. SENSOR_H est défini la première fois : la seconde fois, la condition #ifndef SENSOR_H est fausse et tout ce qui précède #endif est sauté. Sans ce mécanisme, la struct Sensor serait définie deux fois, ce qui provoquerait une erreur de compilation. Cette construction s'appelle une garde d'inclusion (include guard), et avec de nombreux compilateurs, #pragma once peut servir au même but.
Continuer : 9 autres questions sur Bases de la programmation en C