90 votes

variables globales partagées en C

Comment créer des variables globales partagées en C? Si je le mets dans un fichier d'en-tête, l'éditeur de liens se plaint que les variables sont déjà définies. Est-ce que la seule façon de déclarer la variable dans l'un de mes fichiers C et de placer manuellement extern s en haut de tous les autres fichiers C voulant l'utiliser? Cela ne semble pas idéal.

99voto

Hernán Points 2452

Dans un fichier d'en-tête (shared.h):

 extern int this_is_global;
 

Dans chaque fichier pour lequel vous souhaitez utiliser ce symbole global, incluez un en-tête contenant la déclaration externe:

 #include "shared.h"
 

Pour éviter plusieurs définitions d’éditeur de liens, une seule déclaration de votre symbole global doit figurer dans toutes vos unités de compilation (par exemple, shared.cpp):

 /* shared.cpp */
#include "shared.h"
int this_is_global;
 

71voto

DiGMi Points 1404

dans le fichier d'en-tête, écrivez-le avec extern. Et dans l'un des fichiers c, déclarez-le sans extern.

22voto

jim mcnamara Points 8622

Dans le fichier d'en-tête

En tête de fichier

 #ifndef SHAREFILE_INCLUDED
#define SHAREFILE_INCLUDED
#ifdef  MAIN_FILE
int global;
#else
extern int global;
#endif
#endif
 

Dans le fichier contenant le fichier, vous voulez que le global vive:

 #define MAIN_FILE
#include "share.h"
 

Dans les autres fichiers nécessitant la version externe:

 #include "share.h"
 

16voto

nos Points 102226

Vous mettez la déclaration dans un fichier d'en-tête, par exemple

  extern int my_global;
 

Dans l'un de vos fichiers .c, vous le définissez au niveau global.

 int my_global;
 

Chaque fichier .c qui souhaite accéder à my_global inclut le fichier d’en-tête avec le extern dans.

6voto

tritinia Points 31

Si vous partagez du code entre C et C ++, n'oubliez pas d'ajouter les éléments suivants dans le fichier shared.h :

 #ifdef __cplusplus
extern C {
#endif
extern int my_global;
...
#ifdef __cplusplus
}
#endif
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X