En C++, quel est le rôle de l'en-tête dans le programme C++. De net j'ai trouvé que c'est pour éviter d'inclure des fichiers encore et encore, mais comment l'en-tête de garde le garantit.Objectif des protecteurs d'en-tête
Répondre
L'en-tête de garde sert à éviter les problèmes si le fichier d'en-tête est inclus plusieurs fois; par exemple.
#ifndef MARKER
#define MARKER
// declarations
#endif
La première fois que ce fichier est #include
-ed, le symbole MARKER
préprocesseur sera indéfini, de sorte que le préprocesseur définira le symbole, et les déclarations suivantes seront inclus dans le code source vu par le compilateur. Sur les #include
suivants, le symbole MARKER
sera défini, et par conséquent tout le #ifnde
/#endif
sera supprimé par le préprocesseur. Pour que cela fonctionne correctement, le symbole MARKER
doit être différent pour chaque fichier d'en-tête pouvant être #include
-ed.
La raison pour laquelle ce genre de chose est nécessaire est qu'il est illégal en C/C++ de définir un type ou une fonction portant le même nom plusieurs fois dans une unité de compilation. La garde autorise un fichier d'en-tête à #include
autres fichiers d'en-tête sans craindre que cela puisse entraîner l'inclusion de plusieurs déclarations plusieurs fois.
En bref, il ne empêche vous de #include
-ment un fichier encore et encore. Plutôt, il permet vous de le faire sans provoquer d'erreurs de compilation.
Le but des protecteurs d'en-tête est d'éviter les problèmes où du code peut apparaître une seule fois par unité de traduction.
Un exemple est une structure. Vous ne pouvez pas redéfinir une structure même si la seconde définition est identique. Donc, si vous essayez de compiler ce qui suit:
struct foo { int x; };
struct foo { int x; };
Le compilateur échouera en raison de la redéfinition.
Il peut être difficile de garantir que vous n'incluez qu'une seule fois l'en-tête (cela se produit lorsque les en-têtes incluent d'autres en-têtes). Si votre en-tête a une définition de structure, cela entraînera l'échec de la compilation. Les gardes d'en-tête sont la solution facile, de sorte que même si un en-tête est inclus plusieurs fois, son contenu n'apparaît qu'une seule fois.
- 1. Activation par fichier des protecteurs de portée
- 2. Objectif des tables JBoss
- 3. Objectif des constructeurs PHP
- 4. libérant des tableaux objectif-c
- 5. Duplication des mouvements des doigts Objectif C
- 6. Objectif-c quand libérer des objets
- 7. des variables de partage - objectif-c
- 8. Objectif C - Permutations Calcul des doublons
- 9. Objectif C - Affichage des données dans UITextView
- 10. Objectif des méthodes qui appellent seulement super?
- 11. Objectif des macros IF, ELSE, FOR?
- 12. objectif-c
- 13. IEnumerator Objectif
- 14. Ajouter un attribut @property objectif dans c-objectif
- 15. objectif c iphone entiers
- 16. Propriété malloc objectif c
- 17. Amazon SQS objectif c
- 18. Objectif C @property commentaires
- 19. Objectif _blank netiquette
- 20. objectif c et NSDate
- 21. valeurs booléennes Objectif c
- 22. chaîne objectif C Confusion
- 23. objectif c popen
- 24. Tests unitaires - objectif fondamental?
- 25. avertissements Xcode objectif-c
- 26. objectif-c touch-events
- 27. écrêtage d'un objectif-c
- 28. Objectif C: erreur "EXC_BAD_ACCESS"
- 29. Chaîne Aide - Objectif C
- 30. objectif c Comparaison NSString
Le terme accepté pour cela en C++ est "include guard". –
Wikipédia donne [une très bonne explication] (http://en.wikipedia.org/wiki/Include_guard) de la façon dont les gardes travaillent. –