전역 변수
전역 변수는 함수 밖에 선언된 변수이다. 이름대로 전역에 영향을 끼치기 때문에 #include로 포함한 헤더파일의 같은 이름의 전역 변수가 있다면 중복 처리가 되어 링크 과정에서 오류가 발생한다.
정적 변수(static)
정적 변수는 말 그대로 정적이어서 본인의 영역에서 움직이지 않는다. 전역 변수처럼 다른 파일에 영향을 끼치지 않고 전역 변수가 선언된 파일에만 영향을 끼친다. 그러므로 전역 변수처럼 중복 때문에 오류가 발생하지 않는다. 그리고 함수 내부에서 선언하면 그 함수 안에서만 사용할 수 있지만 데이터 영역에 저장되어 함수의 호출 스택이 종료되어도 데이터 영역에 데이터가 남는다.
그렇다면 전역 변수를 쓰면 되지 무엇 때문에 정적 변수를 쓰는걸까? 아이러니하게도 함수 내부에서만 사용할 수 있다는 제한이 있기 때문에 사용하는 것이다. 전역 변수라면 함수 밖에서 값을 마음대로 변경할 수 있기 때문에 그 함수 안에서만 값을 조작할 수 있게 제한 하기 위해 정적 변수를 사용하는 것이다.
그리고 함수 내부에 정적 변수를 선언할 때는 함수가 실행될 때 마다 정적 변수를 초기화하는 것이 아니라 함수가 최초 실행 될 떄 한번만 변수를 초기화 한다. (컴파일러가 static 선언된 변수를 자동으로 그렇게 해준다.)
외부 변수(extern)
외부 변수는 외부 파일에 있는 전역 변수를 사용할 수 있게 해준다. 어떤파일에 int a=0;으로 전역 변수 선언되어있다면 다른 파일에서 extern int a;를 통해 외부파일에 있는 전역변수 a를 사용하겠다라고 선언할 수 있다.
'C++' 카테고리의 다른 글
| [C++] 부동 소수점 (0) | 2023.01.10 |
|---|---|
| [C++] 포인터 비트 단위 이해 (0) | 2022.12.25 |
| [C++] 람다 (0) | 2022.06.25 |
| [C++] 오른값 참조(rvalue reference) (0) | 2022.06.25 |
| [C++] 사용하지 않는 함수 삭제하기 (0) | 2022.06.25 |