如何在 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