Come posso creare variabili globali condivise in C? Se lo metto in un file di intestazione, il linker si lamenta che le variabili sono già definite. È l'unico modo per dichiarare la variabile in uno dei miei file C e inserire manualmente extern
s nella parte superiore di tutti gli altri file C che vogliono usarlo? Non suona ideale.variabili globali condivise in C
risposta
Nel file di intestazione scrivilo con extern
. E nell'ambito globale di uno dei file c lo dichiariamo senza extern
.
Possiamo dichiararlo invece nel file di intestazione del file * .c? – Geremia
In un file di intestazione (shared.h):
extern int this_is_global;
In ogni file che si desidera utilizzare questo simbolo globale, includere intestazione contenente la dichiarazione extern:
#include "shared.h"
Per evitare multipla definizioni linker, solo una dichiarazione di vostro simbolo globale devono essere presenti attraverso i vostri unità di compilazione (ad es: shared.cpp):
/* shared.cpp */
#include "shared.h"
int this_is_global;
hai qualche riferimento preferito per saperne di più sui meccanismi IPC? – NickO
Per favore metti più enfasi su "una sola dichiarazione del tuo simbolo globale ..." Tipo di intervento su quello. Ho avuto la dichiarazione su tutti i file c che volevo usare le variabili globali su :( – AntonioCS
Hai inserito la dichiarazione in un file di intestazione, ad es.
extern int my_global;
In uno dei file .c lo si definisce a livello globale.
int my_global;
Ogni file .c che vuole l'accesso al my_global
include il file di intestazione con il extern
in.
Nel file di intestazione
file di intestazione
#ifndef SHAREFILE_INCLUDED
#define SHAREFILE_INCLUDED
#ifdef MAIN_FILE
int global;
#else
extern int global;
#endif
#endif
Nel file con il file che si desidera che la vita globale:
#define MAIN_FILE
#include "share.h"
Negli altri file che devono la versione extern:
#include "share.h"
ah questa è la soluzione che avevo da un po 'di tempo - ho dimenticato la variabile del preprocessore MAIN_FILE. – Claudiu
Se stai condividendo codice tra C e C++, ricordarsi di aggiungere il seguente al file shared.h
:
#ifdef __cplusplus
extern "C" {
#endif
extern int my_global;
/* other extern declarations ... */
#ifdef __cplusplus
}
#endif
Ci è un modo più pulito con un solo file di intestazione, quindi è più semplice da mantenere. Nell'intestazione con le variabili globali precedere ogni dichiarazione con una parola chiave (io uso comune), allora in un solo file sorgente comprendono come questo
#define common
#include "globals.h"
#undef common
e qualsiasi altro file di origine come questo
#define common extern
#include "globals.h"
#undef common
Assicurati solo di non inizializzare nessuna delle variabili nel file globals.h o il linker continuerà a lamentarsi poiché una variabile inizializzata non viene considerata esterna anche con la parola chiave extern. Il globale.Il file h è simile a questo
#pragma once
common int globala;
common int globalb;
etc.
sembra funzionare per qualsiasi tipo di dichiarazione. Non utilizzare la parola chiave comune su #define, naturalmente.
- 1. Javascript: variabili globali condivise tra file .js
- 2. Variabili globali, librerie condivise e -effetto fPIC
- 3. Variabili condivise in C++ 11
- 4. Variabili condivise in PostCSS
- 5. ogg-c - variabili globali
- 6. Come sono collegate le variabili globali nelle librerie condivise?
- 7. variabili dlopen e globali in C/C++
- 8. Convenzioni di denominazione in C# - Variabili globali
- 9. Variabili globali v Impostazioni in C#
- 10. Variabili vettoriali condivise tra più file C++
- 11. Variabili globali in hadoop
- 12. Variabili globali in Ember
- 13. Variabili globali in Dart
- 14. Variabili globali in R
- 15. variabili globali in Meteor
- 16. Variabili globali in ricorsione. Python
- 17. Le variabili globali scherzano
- 18. Variabili globali e MPI
- 19. PowerShell Variabili globali variabili locali
- 20. stranezze globali variabili in IE
- 21. Variabili globali in IIS Express
- 22. Variabili globali del polimero
- 23. Jison variabili globali
- 24. Variabili globali dattiloscritto
- 25. Su variabili statiche locali e globali in C++
- 26. Come non usare le variabili globali in c
- 27. Le variabili globali sono sempre inizializzate a zero in C?
- 28. best practice per l'utilizzo di variabili globali in C#
- 29. Le variabili globali e locali in R
- 30. Rendere globali tutte le variabili
Condiviso con il proprio codice sorgente? Metti la dichiarazione extern in un file di intestazione e la definizione in un'altra fonte (singola). Quelli sono condivisi tra i thread del processo, naturalmente. Per la condivisione interprocesso dei dati, utilizzare i meccanismi IPC (memoria condivisa, pipe). –
Vedere anche [Quali sono le variabili 'extern' in C?] (Http://stackoverflow.com/questions/1433204/what-are-extern-variables-in-c/1433387#1433387) –
possibile duplicato di [Come fare Condivido le variabili tra diversi file .c?] (Http://stackoverflow.com/questions/1045501/how-do-i-share-variables-between-different-c-files) – 7hi4g0