01. 전역변수와 지역변수
변수의 유효 범위(scope) : 변수가 사용될 수 있는 범위
변수의 유효 범위에 따른 구분
1. 지역 유효 범위(local scope)
: 함수 또는 블록 내부에서 선언된 변수가 선언된 이후 함수나 블록에서 사용되는 변수의 유효 범위
2. 전역 유효 범위(global scope)
; 프로젝트나 파일에서 사용 가능한 범위
지역변수 (= 자동변수, 내부변수)
1. 함수 : 선언된 함수 내부에서 사용 가능한 변수
2. 블록 : 선언된 블록 내부에서 사용 가능한 변수
+ 함수의 매개변수도 함수 전체에서 사용 가능한 지역변수와 같다.
+ 지역변수는 선언 후 초기화하지 않으면 쓰레기 값이 저장되므로 주의
+ 지역 변수가 할당되는 메모리 영역 : 스택(STACK)
지역변수는 선언된 부분에서 자동으로 생성되고 함수나 블록이 종료되는 순간 메모리에서 자동으로 제거 => "자동변수"로도 불리는 이유
전역변수 (= 외부변수)
1. 전체 전역변수 : 프로젝트의 모든 파일에서 사용 가능한 변수
2. 파일 전역변수 : 선언된 파일에서만 사용 가능한 변수
+ 전역변수는 선언되면 자동으로 초기값이 자료형에 맞는 0으로 저장된다
정수형 : 0, 문자형 : '\0' (NULL 문자를 의미), 실수형 : 0.0, 포인터형 : NULL
전역변수를 프로젝트의 다른 파일에서 참조하기
; 키워드 extern을 사용하여, 다른 파일에서 선언된 전역 변수 임을 선언해야 함
키워드 extern을 사용한 변수 선언은 새로운 변수를 선언하는 것이 아니며, 단지 이미 존재하는 전역변수의 유효 범위를 확장하는 것
동일한 파일에서 extern을 사용하는 경우
; 전역변수의 선언 위치가 변수를 사용하려는 위치보다 뒤에 있는 경우, 전역변수를 사용하기 위해서는 extern을 사용한 참조선언이 필요하다.
전역 변수 장점 - 어디에서든 수정할 수 있으므로 사용이 편리
단점 - 전역변수에 예상하지 못한 값이 저장된다면 프로그램 어느 부분에서 수정되었는지 알기 어려운 단점이 있음.
02. 정적 변수와 레지스터 변수
기억부류(storage class) : 변수가 저장되는 위치(할당되는 메모리 영역)에 따른 변수의 성질 (메모리의 할당, 제거시기)
4가지 기억부류 : auto, register, static, extern
기억 부류 종류 | 전역 | 지역 |
auto | X | O |
register | X | O |
static | O | O |
extern | O | X |
키워드 auto, register, static은 변수 선언에서 초기값을 저장할 수 있음.
extern은 불가
키워드 register
; 레지스터 변수는 변수의 저장공간이 일반 메모리가 아니라 CPU 내부의 레지스터(register)에 할당되는 변수
레지스터 변수는 지역 변수에만 이용되는 지역 변수로서, 함수나 블록이 시작되면서 CPU 내부 레지스터에 값이 저장되고, 함수나 블록을 빠져나오면서 소멸되는 특징을 가지고 있음.
레지스터는 CPU 내부에 있는 기억 장소 이므로 일반 메모리 보다 빠르게 참조될 수 있다. 그러므로 레지스터 변수는 처리 속도가 빠른 장점이 있음
+ 레지스터 변수는 일반 메모리에 할당되는 변수가 아니므로 주소연산자 &를 사용할 수 없음
주로 레지스터 변수는 처리 속도를 증가시키려는 변수에 이용 / 반복문의 횟수를 제어하는 제어 변수에 이용하면 효과적
키워드 static
; 변수 선언에서 자료형 앞에 키워드 static을 넣어 정적 변수(static variable)를 선언
+ 정적 변수는 초기 생성된 이후 메모리에ㅔ서 제거되지 않으므로 지속적으로 저장 값을 유지하거나 수정할 수 있는 특성
+ 정적 변수는 초기값을 지정하지 않으면 자동으로 자료형에 따라 0이나 '\0' 또는 NULL 값이 저장
+ 정적 변수의 초기화는 단 한번만 수행 / 초기화는 상수로만 가능
+ 정적 변수는 프로그램이 시작되면 메모리에 할당되고, 프로그램이 종료되는 메모리에서 제거됨
03. 메모리 영역과 변수 이용
메인 메모리 영역 : 데이터 (data) 영역, 힙(heap) 영역, 스택(stack) 영역
메모리 영역은 변수의 유효범위(scope)와 생존기간(life time)에 결정적 역할을 한다.
데이터 영역
: 전역변수와 정적 변수가 할당되는 저장공간
힙 영역
: 동적할당 되는 변수가 할당되는 저장공간
스택 영역
: 함수 호출에 의한 형식 매개변수 그리고 함수 내부의 지역변수가 할당되는 저장공간
'C Programming' 카테고리의 다른 글
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 11. 포인터 기초 - 프로그래밍 연습 (0) | 2022.07.07 |
---|---|
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 10. 변수 유효범위 프로그래밍 연습 (0) | 2022.07.07 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 14. 함수와 포인터 활용 (0) | 2022.07.04 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 13. 구조체와 공용체 - 프로그래밍 연습 (0) | 2022.07.04 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 13. 구조체와 공용체 (0) | 2022.07.04 |