C++ でグローバル変数を宣言する方法
胡金庫
2023年10月12日
この記事では、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
指定子で宣言する必要があります。
#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;
}