variable resueltos manejo lenguaje ejercicios ejemplo archivos c++

c++ - resueltos - Variable global dentro de varios archivos



manejo de archivos en c++ pdf (3)

Agrega un "archivo de encabezado", que describe la interfaz del módulo fuente1.cpp:

fuente1.h

#ifndef SOURCE1_H_ #define SOURCE1_H_ extern int global; #endif

source2.h

#ifndef SOURCE2_H_ #define SOURCE2_H_ int function(); #endif

y agrega una instrucción #include en cada archivo, que usa esta variable, y (importante) que define la variable.

source1.cpp

#include "source1.h" #include "source2.h" int global; int main() { global=42; function(); return 0; }

source2.cpp

#include "source1.h" #include "source2.h" int function() { if(global==42) return 42; return 0; }

Si bien no es necesario, sugiero el nombre source1.h para que el archivo muestre que describe la interfaz pública del módulo fuente1.cpp. De la misma manera, source2.h describe qué es público disponible en source2.cpp.

Tengo dos archivos fuente que necesitan acceder a una variable común. ¿Cuál es la mejor manera de hacer esto? p.ej:

source1.cpp:

int global; int function(); int main() { global=42; function(); return 0; }

source2.cpp:

int function() { if(global==42) return 42; return 0; }

¿Debería la declaración de la variable global ser estática, externa, o debería estar en un archivo de cabecera incluido por ambos archivos, etc.?


En un archivo lo declaras como en source1.cpp, en el segundo lo declaras como

extern int global;

Por supuesto que realmente no quieres hacer esto y probablemente deberías hacer una pregunta sobre lo que intentas lograr para que la gente de aquí pueda brindarte otras formas de lograrlo.


La variable global debe declararse extern en un archivo de encabezado incluido por ambos archivos fuente, y luego se define solo en uno de esos archivos fuente:

common.h

extern int global;

source1.cpp

#include "common.h" int global; int function(); int main() { global=42; function(); return 0; }

source2.cpp

#include "common.h" int function() { if(global==42) return 42; return 0; }