안선생의 개발 블로그

C++ 정적 변수 & 외부 변수 본문

C++

C++ 정적 변수 & 외부 변수

안선생 2022. 6. 1. 22:09

정적변수(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. 그러면 모든 소스에서 사용가능하는 외부변수가 만들어짐

 

출처 : https://www.youtube.com/c/AssortRockGameAcademy

'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