Buenas.
Quizás la solución más flexible de todas sea la propueta por jc_moj.
Lo ideal es evitar el uso de variables globales en la medida de lo posible.
Si por cuestiones de legibilidad es necesario usar variables globales dentro de C++ y tienes la suerte de que todas las funciones que hacen uso de dicha variable se encuentran implementadas dentro del mismo CPP puedes usar un pequeño truco para evitar colisiones fuera del cpp:
test.h
Código C++:
Ver original#pragma once
int RecuperarValor();
void EstablecerValor(int valor);
test.cpp
Código C++:
Ver originalnamespace
{
int _valor = 0;
}
int RecuperarValor()
{ return _valor; }
void EstablecerValor(int valor)
{ _valor = valor; }
main.cpp
Código C++:
Ver original#include "test.h"
int main()
{
EstablecerValor(123);
int _valor = 444;
std::cout << RecuperarValor(); // Escribe 123
std::cout << _valor << std::endl; // Escribe 444
}
Como veis, el namespace no tiene un nombre asociado, es lo que se conoce como namespace anónimo. Sus características son las siguientes:
- Como no tiene nombre no puede ser referenciado fuera del archivo que lo usa, por lo que las variables globales declaradas dentro de dicho namespace no serán accesibles fuera del fichero donde se encuentran.
- Al no tener nombre no es necesario añadir ningún prefijo para usar lo que se encuentre almacenado dentro de dicho namespace.
PD.: Si os molan estos trucos avisadme y os digo donde podéis hacer donaciones voluntarias jejejejeje
Un saludo