• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

정적 변수 관련 질문

24.01.16 15:23 작성 조회수 81

1

정적변수 a로 정의되어 있으면, 다른 파일에서 a로 접근이 불가능하다고 하셨는데

이 두가지 코드는 한 파일에서만 놓고 보면 동일한 결과이지만,

첫번째 코드는 static으로 정의되어 있기 때문에 다른 cpp파일에서 a로 접근이 불가능하고, 두번째 코드는 전역변수로 정의되어 있기 때문에 다른 cpp파일에서 a로 접근이 가능한 것이라 보면 되는걸까요?

// static 사용한 경우
#include <iostream>

using namespace std;

void doSomething() {
	static int a = 1;
	++a;
	cout << a << endl;
}

int main() {
	doSomething();  // 2
	doSomething();  // 3
	doSomething();  // 4
	doSomething();  // 5

	return 0;
}
// static 사용 안했지만 static 사용한 것과 동일한 결과
#include <iostream>

using namespace std;

int a = 1;

void doSomething() {
	++a;
	cout << a << endl;
}

int main() {
	doSomething();   // 2
	doSomething();   // 3
	doSomething();   // 4
	doSomething();   // 5

	return 0;
}

답변 1

답변을 작성해보세요.

2

Soobak님의 프로필

Soobak

2024.01.16

안녕하세요, 답변 도우미 Soobak 입니다.

 

네, 맞습니다.

  • 첫 번째 코드(static)
    : 여기서 static int a = 1; 으로 선언된 변수 adoSomething() 함수 내에서만 접근이 가능한 정적 변수입니다.
    static 키워드는 변수의 수명을 함수 호출이 끝날 때가 아닌, 프로그램 실행 시간 내내 지속되도록 합니다.
    하지만, 오직 그 함수 내에서만 보이고 접근할 수 있으며, 다른 파일에서는 보이지 않습니다.
    즉, 다른 파일에서는 이 변수에 접근할 수 없습니다.

  • 두 번째 코드(전역 변수)
    : 여기서 int a = 1; 으로 선언된 변수 a 는 전역 변수로, 전체 프로그램에서 접근할 수 있습니다.
    즉, 함수 내부 또는 다른 파일에서도 접근이 가능하며, 프로그램의 어느 곳에서나 같은 변수를 참조합니다.

이와 관련하여 extern 키워드와 함께, 강의 4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결 을 참고해보시면 도움이 되실 것 같습니다.