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++의 여러 소스 파일에서 전역 변수 선언

또는 다른 소스 파일에 선언 된 전역 변수가있을 수 있으며 액세스하거나 수정해야합니다. 이 경우 전역 변수에 액세스하려면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;
}
작가: 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