Como declarar uma variável global em C++

Jinku Hu 12 outubro 2023
  1. Declarar uma variável global em um arquivo de fonte única em C++
  2. Declare uma variável global em arquivos de múltiplas fontes em C++
Como declarar uma variável global em C++

Este artigo explicará vários métodos de como declarar uma variável global em C++.

Declarar uma variável global em um arquivo de fonte única em C++

Podemos declarar uma variável global com a declaração que é colocada fora de cada função. Neste exemplo, assumimos a variável do tipo int e a inicializamos para um valor arbitrário 123. A variável global pode ser acessada a partir do escopo da função main, assim como qualquer construção interna (loop ou se declaração) dentro dela. Modificações na global_var também são visíveis para cada parte da rotina main, como demonstrado no exemplo a seguir.

#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 outro lado, se funções adicionais também forem definidas no mesmo arquivo fonte, elas podem acessar diretamente o valor da global_var e modificá-lo no escopo da função. As variáveis globais também podem ser declaradas com um especificador const, o que as força a serem acessíveis somente através da unidade de tradução atual (arquivo fonte com todos os cabeçalhos incluídos).

#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

Declare uma variável global em arquivos de múltiplas fontes em C++

Alternativamente, pode haver variáveis globais declaradas em diferentes arquivos fonte, e precisam ser acessadas ou modificadas. Neste caso, para acessar a variável global, ela precisa ser declarada com um especificador extern, que diz ao compilador (mais precisamente o linker) onde procurar a definição 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;
}

Pode haver variáveis globais declaradas com um especificador static nos diferentes arquivos fonte em alguns casos. Estas variáveis são acessíveis somente dentro do arquivo onde estão definidas e não podem ser alcançadas a partir de outros arquivos. Se você ainda tentar declará-las com extern no arquivo atual, o erro do compilador ocorrerá.

#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