Erreur 'dupliquer la définition de" lors de la compilation de C deux fichiers qui font référence à un fichier d'en-tête
J'ai deux C fichiers et d'un en-tête qui sont comme suit:
Fichier d'en-tête en-tête.h:
char c = 0;
fichier1.c:
#include "header.h"
fichier2.c:
#include "header.h"
J'ai été averti à propos de 'la double définition de" lors de la compilation. Je comprends la cause que la variable c est défini par deux fois dans les deux fichier1.c et fichier2.c; cependant, je n'ai besoin de faire référence à l'en-tête.h en c fichiers. Comment dois-je régler ce problème?
OriginalL'auteur super newbie | 2010-03-16
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, ne pas définir des variables dans les en-têtes. Utiliser le
extern
qualifier lors de la déclaration de la variable dans le fichier d'en-tête, et de définir dans un (pas les deux) de vos fichiers ou dans son propre fichier, si vous préférez.en-tête:
mise en œuvre:
Alternativement, vous pouvez laisser la définition de l'en-tête, mais ajouter
static
. À l'aide destatic
sera à l'origine des différents programme de comportement que l'utilisation deextern
comme dans l'exemple ci - dessus, alors soyez prudent. Si vous le faitesstatic
, chaque fichier qui contient l'en-tête de sa propre copie dec
. Si vous utilisezextern
, qu'ils vont partager une copie.Deuxièmement, l'utilisation d'un garde contre la double inclusion:
OriginalL'auteur Carl Norum
Utilisation
extern char c
dans votre en-tête, etchar c = 0
dans l'une de vos.c
fichiers.OriginalL'auteur Giuseppe Guerrini
Qu'est-ce que
char c
? Vous voulez probablement à êtreextern char c
ou si vous voulez pour que ce soit une variable distincte pour chaque unité de compilation(fichier source), alors vous devriez utiliserstatic char c
OriginalL'auteur Earlz
Si vous ne pouvez pas modifier l'en-tête, puis comme un hack, dans un (mais pas les deux) de vos fichiers source, vous pourriez faire ceci:
Ce résultat
char c = 0;
devenirchar d = 0;
, mais bien sûr, n'importe où ailleurs quec
est utilisé, il doit aussi devenird
, de sorte qu'il peut ne pas fonctionner du tout.+1 b/c c'est de la folie, mais étonnamment utile hack pour le débogage de code incorporé avec un bazillion 3ème partie les bibliothèques!
OriginalL'auteur dreamlax