Cómo declarar una variable global en C++

Jinku Hu 12 octubre 2023
  1. Declarar una variable global en un archivo de origen único en C++
  2. Declarar una variable global en múltiples archivos fuente en C++
Cómo declarar una variable global en C++

Este artículo explicará varios métodos de cómo declarar una variable global en C++.

Declarar una variable global en un archivo de origen único en C++

Podemos declarar una variable global con la declaración que se coloca fuera de cada función. En este ejemplo, asumimos la variable de tipo int y la inicializamos a un valor arbitrario 123. Se puede acceder a la variable global desde el ámbito de la función main, así como desde cualquier construcción interna (bucle o declaración if) dentro de ella. Las modificaciones de la var_global también son visibles en cada parte de la rutina main, como se demuestra en el siguiente ejemplo.

#include <iostream>

using std::cout;
using std::endl;

int global_var = 123;

int main() {
  global_var += 1;
  cout << global_var << endl;

  for (int i = 0; i < 4; ++i) {
    global_var += i;
    cout << global_var << " ";
  }
  cout << endl;

  return EXIT_SUCCESS;
}

Resultado:

124
124 125 127 130

Por otra parte, si se definen también funciones adicionales en el mismo fichero fuente, pueden acceder directamente al valor de global_var y modificarlo en el ámbito de la función. Las variables globales también pueden ser declaradas con un especificador const, lo que obliga a que sólo sean accesibles a través de la unidad de traducción actual (archivo fuente con todos los encabezados incluidos).

#include <iostream>

using std::cout;
using std::endl;

int global_var = 123;

void tmpFunc() {
  global_var += 1;
  cout << global_var << endl;
}

int main() {
  tmpFunc();

  return EXIT_SUCCESS;
}

Resultado:

124

Declarar una variable global en múltiples archivos fuente en C++

Alternativamente, puede haber variables globales declaradas en diferentes archivos de origen, y que sea necesario acceder o modificar. En este caso, para acceder a la variable global, es necesario declararla con un especificador extern, que le diga al compilador (más precisamente al enlazador) dónde buscar la definición glob_var1.

#include <iostream>

using std::cout;
using std::endl;

int global_var = 123;
extern int glob_var1;  // Defined - int glob_var1 = 44; in other source file

void tmpFunc() {
  glob_var1 += 1;
  cout << glob_var1 << endl;
}

int main() {
  tmpFunc();

  return EXIT_SUCCESS;
}

Puede haber variables globales declaradas con un especificador static en los diferentes archivos fuente en algunos casos. Estas variables son accesibles sólo dentro del archivo donde están definidas y no pueden ser alcanzadas desde otros archivos. Si aún así intentas declararlas con extern en el archivo actual, se producirá un error de compilación.

#include <iostream>

using std::cout;
using std::endl;

int global_var = 123;
extern int
    glob_var2;  // Defined - static int glob_var2 = 55; in other source file

void tmpFunc() {
  glob_var2 += 1;
  cout << glob_var2 << endl;
}

int main() {
  tmpFunc();

  return EXIT_SUCCESS;
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook