¿Cómo puedo crear variables globales que se comparten en C? Si lo pongo en un archivo de encabezado, el enlazador se queja de que las variables ya están definidas. ¿Es la única manera de declarar la variable en uno de mis archivos C y poner manualmente en extern
s en la parte superior de todos los otros archivos C que desean usarlo? Eso suena no ideal.variables globales compartidas en C
Respuesta
En el archivo de encabezado, escríbalo con extern
. Y en el alcance global de uno de los archivos c lo declara sin extern
.
¿Podemos declararlo en el archivo de encabezado del archivo * .c? – Geremia
En un archivo de cabecera (SHARED.H):
extern int this_is_global;
En todos los archivos que desea utilizar este símbolo mundial, incluir un encabezado que contiene la declaración extern:
#include "shared.h"
Para evitar múltiples definiciones de enlazador, solo una declaración de su símbolo global debe estar presente en todas sus unidades de compilación (p. ej .: shared.cpp):
/* shared.cpp */
#include "shared.h"
int this_is_global;
¿Tiene alguna referencia preferida para aprender más sobre los mecanismos de IPC? – NickO
Por favor ponga más énfasis en "solo una declaración de su símbolo global ..." Tipo de tropezó en eso. Tuve la declaración en todos los archivos c que quería utilizar las variables globales en :( – AntonioCS
Pones la declaración en un archivo de cabecera, p.
extern int my_global;
En uno de sus archivos .c lo define como de alcance global.
int my_global;
Cada archivo .c que quiere tener acceso a my_global
incluye el fichero de cabecera con el extern
en.
En el archivo de cabecera
archivo de cabecera
#ifndef SHAREFILE_INCLUDED
#define SHAREFILE_INCLUDED
#ifdef MAIN_FILE
int global;
#else
extern int global;
#endif
#endif
En el archivo con el archivo que desea que el mundo en vivo:
#define MAIN_FILE
#include "share.h"
En los otros archivos que necesitan la versión extern:
#include "share.h"
ah esta es la solución que tuve hace un tiempo - me olvidé de la variable de preprocesador MAIN_FILE. Me gusta la respuesta cur aceptada más tarde – Claudiu
Si va a compartir código entre C y C++, recuerde que debe añadir lo siguiente en el archivo shared.h
:
#ifdef __cplusplus
extern "C" {
#endif
extern int my_global;
/* other extern declarations ... */
#ifdef __cplusplus
}
#endif
Hay es una forma más limpia con solo un archivo de encabezado por lo que es más fácil de mantener. En la cabecera con las variables globales prefijo de cada declaración con una palabra clave (yo uso común), entonces en un solo archivo fuente incluirla como esto
#define common
#include "globals.h"
#undef common
y cualquier otro archivo de origen como esto
#define common extern
#include "globals.h"
#undef common
Solo asegúrese de no inicializar ninguna de las variables en el archivo globals.h o el enlazador aún se quejará porque una variable inicializada no se trata como externa incluso con la palabra clave extern. Lo global.h archivo se parece a esto
#pragma once
common int globala;
common int globalb;
etc.
parece funcionar para cualquier tipo de declaración. No use la palabra clave común en #define, por supuesto.
- 1. Javascript: Variables globales compartidas entre archivos .js
- 2. Variables globales, bibliotecas compartidas y -fPIC efecto
- 3. variables globales en C++
- 4. objetivo-c - variables globales
- 5. C# - Winforms - Variables globales
- 6. C++ de variables globales
- 7. Variables globales en C# .net
- 8. C++ Variables globales en varios archivos
- 9. Variables globales v Configuración en C#
- 10. variables estáticas locales y globales en C++
- 11. variables globales en RequireJS
- 12. Variables globales en R
- 13. Variables globales en hadoop
- 14. Variables globales y MPI
- 15. ASP.NET C# Las variables estáticas son globales?
- 16. variables globales estáticas y externas en C y C++
- 17. Usando variables globales en backbone.js
- 18. Inicializando variables globales en VBA
- 19. ¿Debo usar variables globales?
- 20. Variables globales con GO
- 21. Greasemonkey y variables globales
- 22. ¿En qué carpeta debo poner plantillas parciales compartidas "globales"?
- 23. Imprimir todas las variables globales/variables locales?
- 24. Ubicación de punteros y variables globales en C
- 25. ¿Hay variables globales en EXT JS
- 26. Usando C/Pthreads: ¿las variables compartidas deben ser volátiles?
- 27. Variables globales en paquetes en R
- 28. Variables globales en Javascript en varios archivos
- 29. Haciendo todas las variables globales
- 30. Coffeescript + Prueba unitaria: variables globales?
¿Compartido dentro de su propio código fuente? Coloque la declaración extern en un archivo de encabezado y la definición en otra fuente (única). Esos son compartidos entre sus hilos de proceso, por supuesto. Para el intercambio de datos entre procesos, use los mecanismos de IPC (memoria compartida, tuberías). –
Ver también [¿Qué son las variables 'extern' en C?] (Http://stackoverflow.com/questions/1433204/what-are-extern-variables-in-c/1433387#1433387) –
posible duplicado de [¿Cómo hacer? ¿Comparto variables entre diferentes archivos .c?] (Http://stackoverflow.com/questions/1045501/how-do-i-share-variables-between-different-c-files) – 7hi4g0