Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 정적, 자동, 전역 및 지역 변수의 차이점 완벽 정리

C++에서 변수를 이해하려면 서로 다른 두 가지 개념을 구분해야 합니다.

  • 범위(Scope): 이름에 접근할 수 있는 위치를 결정합니다 — 전역(global)과 지역(local)
  • 저장 기간(Storage Duration): 변수가 언제 생성되고 소멸되는지를 결정합니다 — 정적(static)과 자동(auto)

범위(Scope)

지역 변수는 해당 함수나 코드 블록 내부의 문장에서만 사용할 수 있습니다. 지역 변수는 그 자체만으로는 다른 함수에서 알 수 없습니다.

예제

#include <iostream>
using namespace std;

int main () {
   // 지역 변수 선언
   int a, b;
   int c;

   // 실제 초기화
   a = 10;
   b = 20;
   c = a + b;

   cout << c;
   return 0;
}

실행 결과는 다음과 같습니다.

출력

30

전역 변수는 모든 함수 외부, 보통 프로그램 상단에 정의됩니다. 전역 변수는 프로그램이 실행되는 동안 내내 값을 유지하며, 어떤 함수에서도 접근할 수 있습니다.

예제

#include <iostream>
using namespace std;

// 전역 변수 선언
int g;

int main () {
   // 지역 변수 선언
   int a, b;

   // 실제 초기화
   a = 10;
   b = 20;
   g = a + b;

   cout << g;
   return 0;
}

실행 결과는 다음과 같습니다.

출력

30

저장 기간(Storage Duration)

자동(automatic) 변수는 실행 흐름이 해당 범위를 벗어나면 수명이 끝나고, 범위에 다시 진입하면 새로 생성되는 지역 변수입니다.

예제

for (int i = 0; i < 5; ++i) {
   int n = 0;
   printf("%d ", ++n); // 1 1 1 1 1 출력 - 이전 값은 사라짐
}

반면 정적(static) 변수는 프로그램이 종료될 때까지 수명이 지속됩니다. 지역 변수라도 정적으로 선언하면 실행 흐름이 범위를 벗어난 후에도 값이 유지됩니다.

for (int i = 0; i < 5; ++i) {
   static int n = 0;
   printf("%d ", ++n); // 1 2 3 4 5 출력 - 값이 유지됨
}

주의할 점

static 키워드는 정적 저장 기간 외에도 여러 가지 의미로 사용된다는 점에 유의해야 합니다. 예를 들어 클래스 멤버 변수나 내부 연결(internal linkage) 지정 등에도 활용됩니다.

또한 C++11부터 auto 키워드는 더 이상 자동 저장 기간을 의미하지 않습니다. 현재 C++에서 auto는 변수 초기화자(initializer)로부터 타입을 자동으로 추론하는 기능을 나타냅니다.