안선생의 개발 블로그
C++ 정적 변수 & 외부 변수 본문
정적변수(static)
변수명앞에 static을 붙여줌,초기화하지 않아도 자동으로 0으로 초기화 된다.
ex) static int n;
정적변수는 static뜻 말 그대로 안움직이다 즉 선언된 곳에서만 쓸 수 있다라는 뜻이다.
어디에서 쓰냐에서 따라서 달라진다. 예를 들어보자
main()함수 밖에 선언됐다. 이 뜻은 즉 소스파일(main.cpp)에서 선언됐다라는 뜻이다. 즉 전역변수라고 생각하면 편하다.
위 소스와 같이 main.cpp에서 쓸 수 있으므로 지역변수 처럼 사용 가능하다.
그러면 함수안에 정적 변수를 써보면 어떻게 될까?
Test라는 함수를 만들어서 사용해 보았다. 값은 3이 나온다 즉 그뜻은 statci은 지역변수랑 달리 호출 댈때마다 0으로 초기화 시켜주는 것이 아닌 초기값을 0을 주겠다는 소리고 그 다음부터는 이 코드를 무시한다고 생각하면 된다. 즉 정적변수는 초기화가 한번만 일어난다. 이것이 지역변수랑 정적변수의 차이점이라고 볼 수 있다.
정적변수와 전역변수 차이점
이 코드를 보시면 알겠지만 지역내에선 전역변수처럼 사용되지만
main(다른 함수)에서 n의 값을 접근할 수 없다. 이것이 전역 변수와 정적변수의 차이이다.
이런 변수를 정적 지역 변수라고 부른다.
즉 정적변수를 함수 안에서 썻을 때에는 함수안에서만 사용이 가능하다. 또 초기화는 한번만 이루어진다.
정리
그러면 전역함수를 쓰면 되지않나 굳이 정적변수를 써야하는 의문점이 들 수 있다. 정적변수를 사용함으로써 정적변수의 기능은 제한을 거는것라고 생각하면 된다. 전역변수를 쓰다가 소스가 많아지면 값을 어디선가 변경할 수 있는 실수를 할 수 있다. 즉 전역변수를 잘못 사용하거나 남용할경우 관리(수지, 유지 보수, 재사용 등등)가 어려워질 수 있습니다.하지만 정적변수로 제한을 검으로써 다른 함수에서 쓰는 실수를 방지해 줄 수 있다. 즉 내가 사용하고 싶은 함수안에서만 쓰고 싶을 때 사용할 때 사용한다.
1. 자료형 앞 static 키워드로 정의
2. 중괄호 내에서 선언되어도 초기화는 한번만 실행.
3. 메모리 생성시점 : 중괄호 내부
4. 메모리 소멸 시점 : 프로그램 종료
외부변수(extern)
변수명 앞에 extern을 붙여줌
먼저 선언을 해준다.
외부변수 iextern이 만들어짐
그다음에 초기값을 지정해준다.
그 후 메인함수에서 변수 iextern에 500을 넣고 add함수를 호출해보고 실행
iextern변수가 다른 소스파일에서도 값을 사용이 가능한걸 알 수 있다. 분할구현할시 전역변수를 사용하면 다른 소스파일에서는 안됐지만 이렇게 extern을 붙여 외부변수로 사용하면 모든 소스에서 쓸 수 있게 된다.
1. 변수명 앞에 extern을 붙여주고 선언을 해준다 (여기서 초기값을 주면 안됨)
2. 아무 소스파일에다가 함수밖에다가 다시 초기값을 넣어줌
3. 그러면 모든 소스에서 사용가능하는 외부변수가 만들어짐
'C++' 카테고리의 다른 글
C++ 상수(const) (0) | 2022.06.05 |
---|---|
C++ 포인터 (0) | 2022.06.03 |
C++ 분할구현 (0) | 2022.06.01 |
C++ 지역변수,전역변수 (0) | 2022.05.30 |
C++ 구조체 (0) | 2022.05.30 |