happy coding

[c] 변수의 유효 범위 본문

self study/언어의 기본부터

[c] 변수의 유효 범위

yeoonii 2022. 11. 18. 23:53

변수의 유효 범위(variable scope)

C언어에서 변수의 선언 위치에 따라 해당 변수의 유효 범위, 메모리 반환 시기, 초기화 여부, 저장되는 장소 등이 변경되는데 변수는 이 기준을 통해 1. 지역 변수 2. 전역 변수 3. 정적 변수 4. 레지스터 변수 로 총 4개로 나눌 수 있다.

메모리의 구조

컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하는데, C 프로그램이 운영체제로부터 할당받는 대표적이 메모리 공간은 1. 코드(code) 영역 2. 데이터(data) 영역 3. 스택(stack) 영역 4. 힙(heap) 영역 으로 나눌 수 있다.

지역 변수(local variable)

지역 변수란 '블록' 내에서 선언된 변수를 의미한다. 변수가 선언된 블록 내에서만 유효하기 때문에 블록이 종료되면 메모리에서 사라진다. 이러한 지역 변수는 메모리 상의 스택(stack) 영역에 저장되며, 초기화하지 않으면 쓰레기값으로 초기화된다. 또한 함수의 매개 변수도 함수 내에서 정의되는 지역 변수로 취급된다. 주의할 점은 변수의 이름을 같은 이름으로 여러 번 사용하는 것은 구문 상 에러를 발생시키지 않지만, 바람직하지 않은 방식이며 한 블록 내에서 같은 이름의 변수를 또다시 선언하려고 하면 컴파일되는 오류를 발생시킨다는 점이다.

전역 변수(global variable)

전역 변수란 함수의 외부에서 선언된 변수를 의미한다. 이 변수는 프로그램의 어디에서나 접근할 수 있고 프로그램이 종료되어야만 메모리에서 사라지며, 저장되는 영역은 메모리상의 데이터(data) 영역이고 직접 초기화하지 않아도 0으로 자동 초기화된다. 주의할 점은 전역 변수왁 같은 이름으로 지역 변수를 선언한다면 서로를 덮어쓸 수 있기 때문에 좋지 않은 점이다. 또한 여러 개의 파일로 구성된 프로그램에서 외부 파일의 전역 변수를 사용하기 위해서는 extern 키워드를 사용해 다시 선언해야 한다.

정적 변수(static variable)

정적 변수란 static 키워드로 선언한 변수를 의미한다. 이렇게 선언된 정적 변수는 지역 변수와 전역 변수의 특징을 모두 가지게 되는데, 함수 내에서 선언된 정적 변수는 전역 변수처럼 단 한 번만 초기화되며 프로그램이 종료되어야 메모리상에서 사라지고, 지역 변수처럼 해당 변수처럼 해당 함수 내에서만 접근할 수 있다.

레지스터 변수(register variable)

레지스터 변수란 지역 변수를 선언할 때 register 키워드를 붙여 선언한 변수를 의미한다. 이렇게 선언된 레지스터 변수는 CPU의 레지스터 메모리에 저장되어 빠르게 접근할 수 있지만, 컴퓨터의 레지스터는 매우 작은 크기의 메모리이기 때문에 이 영역에 변수를 선언하기 힘든 경우가 많기에 해당 변수를 그냥 지역 변수로 선언하게 된다.

변수 종류 키워드 선언 위치 유효 범위
지역 변수 auto 함수/블록의 내부 함수/블록의 내부
전역 변수 extern 함수의 외부 프로그램 전체
정적 변수 static 함수/블록의 내부 함수/블록의 내부
레지스터 변수 register 함수/블록의 내부 함수/블록의 내부
변수 종류 메모리 소멸 시기 초깃값 저장 장소
지역 변수 함수 종료시 초기화되지 않는다 스택 영역
전역 변수 프로그램 종료시 0으로 초기화 데이터 영역
정적 변수 프로그램 종료시 0으로 초기화 데이터 영역
레지스터 변수 함수 종료시 초기화되지 않는다 CPU의 레지스터

 

'self study > 언어의 기본부터' 카테고리의 다른 글

[c] 배열  (0) 2022.11.19
[c] 재귀 호출  (0) 2022.11.19
[c] C언어 함수  (0) 2022.11.18
[c] 기타 제어문  (0) 2022.11.18
[c] 반복문  (0) 2022.11.18
Comments