-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
해결됨
정적 변수 관련 질문
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;
}
답변을 작성해보세요.
2
Soobak
2024.01.16
안녕하세요, 답변 도우미 Soobak 입니다.
네, 맞습니다.
첫 번째 코드(
static
)
: 여기서static int a = 1;
으로 선언된 변수a
는doSomething()
함수 내에서만 접근이 가능한 정적 변수입니다.static
키워드는 변수의 수명을 함수 호출이 끝날 때가 아닌, 프로그램 실행 시간 내내 지속되도록 합니다.
하지만, 오직 그 함수 내에서만 보이고 접근할 수 있으며, 다른 파일에서는 보이지 않습니다.
즉, 다른 파일에서는 이 변수에 접근할 수 없습니다.두 번째 코드(전역 변수)
: 여기서int a = 1;
으로 선언된 변수a
는 전역 변수로, 전체 프로그램에서 접근할 수 있습니다.
즉, 함수 내부 또는 다른 파일에서도 접근이 가능하며, 프로그램의 어느 곳에서나 같은 변수를 참조합니다.
이와 관련하여 extern
키워드와 함께, 강의 4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결 을 참고해보시면 도움이 되실 것 같습니다.
답변 1