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++의 여러 소스 파일에서 전역 변수 선언
또는 다른 소스 파일에 선언 된 전역 변수가있을 수 있으며 액세스하거나 수정해야합니다. 이 경우 전역 변수에 액세스하려면glob_var1
정의를 찾을 위치를 컴파일러 (더 정확하게는 링커)에 알려주는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;
}
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