如何在 C++ 中声明全局变量

Jinku Hu 2023年10月12日
  1. C++ 中在单个源文件中声明全局变量的方法
  2. 在 C++ 中的多个源文件中声明全局变量
如何在 C++ 中声明全局变量

本文将介绍几种在 C++ 中声明全局变量的方法。

C++ 中在单个源文件中声明全局变量的方法

我们可以用放在每个函数外面的语句声明一个全局变量。在这个例子中,我们假设 int 类型的变量,并将其初始化为一个任意的 123 值。全局变量可以从 main 函数的作用域以及它内部的任何内部构造(循环或 if 语句)中访问。对 global_var 的修改对 main 例程的每个部分也是可见的,如下例所示。

#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;
}

输出:

124
124 125 127 130

另一方面,如果在同一个源文件中还定义了其他函数,它们可以直接访问 global_var 值,并在函数范围内修改它。全局变量也可以用 const 指定符来声明,这就迫使它们只能通过当前的翻译单元(包含所有头文件的源文件)来访问。

#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;
}

输出:

124

在 C++ 中的多个源文件中声明全局变量

另外,可能有一些全局变量在不同的源文件中声明,需要被访问或修改。在这种情况下,要访问全局变量,需要用 extern 指定符来声明,它告诉编译器(更准确的说是链接器)在哪里寻找 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;
}

在某些情况下,可能会在不同的源文件中用 static 指定符声明全局变量。这些变量只能在定义它们的文件中访问,不能从其他文件中访问。如果你仍然试图在当前文件中用 extern 声明它们,就会发生编译器错误。

#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;
}
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook