2017-07-27 3 views
1

J'ai une structure déclarée dans un fichier d'en-tête appelé h1.h inclus dans deux fichiers sources, c1.c et c2.c.Rendre un pointeur de structure globale disponible pour plusieurs fichiers sources

typedef struct 
{ 
    char binary_filename[256]; 
}programming; 

Je veux créer deux variables de cette structure, device1 et device2 puis déclarer deux pointeurs à chacune de ces variables, programmingPtr1 et programmingPtr2.

Je souhaite être en mesure d'accéder au membre binary_filename d'une instance dans chacun des fichiers sources.

Je suis confus quant à l'endroit où je devrais déclarer ces variables et pointeurs.

Dois-je déclarer les variables extern dans l'en-tête? J'ai lu this post mais il ne traite pas des pointeurs vers des variables.

Quelqu'un peut-il vous conseiller s'il vous plaît quant à la meilleure méthode?

+0

Vous définissez la variable dans l'un des fichiers 'C' et le déclarez comme extern dans l'autre (ou dans l'en-tête .. en fonction de votre conception) –

Répondre

1

Pour utiliser les variables dans plusieurs fichiers source, vous devrez les déclarer dans un fichier d'en-tête que toutes les sources pertinentes comprennent, vous définissez les dans exactement un fichier source.

Ainsi, votre tête aurait:

extern programming device1; 
extern programming device2; 
extern programming *programmingPtr1; 
extern programming *programmingPtr2; 

Puis, dans un fichier source, vous auriez:

programming device1 = { "filename1" }; 
programming device2 = { "filename2" }; 
programming *programmingPtr1 = &device1; 
programming *programmingPtr2 = &device2; 
+0

merci j'ai essayé, je reçois un' défini référence à 'programmingPtr1 'dans le fichier source? Des idées? –

+0

@articsol Vous devez lier les deux fichiers ensemble. Avec FCC ce serait 'gcc -o programme fichier1.c fichier2.c' – dbush

0

Vous n'êtes pas en train de créer toutes les instances - ils ne sont que deux structures distinctes dans la portée mondiale. La même chose est avec le pointeur. Vous avez juste besoin d'informer le compilateur que l'objet est défini ailleurs en utilisant le mot-clé extern. Bien sûr, vous devez également avoir votre typedef.

La "connexion" réelle entre l'objet externe défini et l'objet physique sera effectuée par l'éditeur de liens.