Typedef dans le fichier d'en-tête inclus plusieurs fois
En gros, j'ai défini et typedef ed cette structure:
typedef struct{
void** elements;
int numElements;
int itemSize;
int capacity;
int dynamicElements;
}array;
pour laquelle j'ai écrit accompagnant la dynamique de la matrice de fonctions de manipulation. Cependant, j'ai un peu un problème. Dans différentes fonctions, je passe cette structure comme un argument. Afin de modulariser le code, j'ai besoin de prototypes de ces fonctions dans les fichiers d'en-tête (et dans le but de permettre à des arguments de type tableau, j'ai besoin d'include "tableau.h" dans ces fichiers d'en-tête).
Donc, à la suite notamment de l'ensemble de mes fichiers d'en-tête, le "tableau.h" fichier d'en-tête a été inclus plusieurs fois. Comme prévu, le type struct a été typedef ed plus d'une fois, et provoque des conflits.
Ma question est: comment puis-je avoir cette définition dans mon fichier d'en-tête, de sorte qu'elle ne se casse pas si inclus plusieurs fois?
OriginalL'auteur BraedenP | 2012-03-04
Vous devez vous connecter pour publier un commentaire.
En utilisant inclure les gardes.
OriginalL'auteur Oliver Charlesworth
Le commun langage est la structure de vos en-têtes comme ceci:
Cela permettra d'éviter la tête de #inclus plus d'une fois.
_
...Pourquoi pas? Veuillez expliquer.
Les noms commençant par des caractères de soulignement sont réservés pour une utilisation par le compilateur.
Les symboles avec un trait de soulignement suivie par une lettre majuscule ou par un autre trait de soulignement sont réservés pour la mise en œuvre dans toute la portée, et les symboles avec un trait de soulignement suivie par une lettre sont réservés au fichier et le tag de la portée (C99 §7.1.3). Cela étant dit, généralement les macros sont écrits en majuscules (j'utilise moi-même la convention
ARRAY_H_INCLUDED
pour ma inclure les gardes).c'est pourquoi j'utilise le
_INCLUDED
suffixe. 🙂OriginalL'auteur Adam Liss
Sur certains les compilateurs modernes à l'aide de
#pragma once
au début du fichier d'en-tête aura le même effet que l'inclure garde idiome.Ce qui est vrai en général, mais il ya des avantages à l'utilisation de
#pragma once
: y compris l'amélioration de la compilation de l'efficacité. Il y a une bonne discussion de l'utilisation ici: en.wikipedia.org/wiki/Pragma_onceOriginalL'auteur andrewmu