변수
변수의 속성
이름, 타입, 크기, 값 + 범위, 생존시간, 연결
- 범위(scope) : 변수가 사용 가능한 범위, 가시성
- 생존 시간(lifetime) : 메모리에 존재하는 시간
- 연결(linkage) : 다른 영역에 있는 변수와의 연결 상태
생존 기간
- 정적 할당(static allocation)
프로그램 실행 시간동안 계속 유지
- 자동 할당(automatic allocation)
블록에 들어갈 ㅉ때 생성
블록에 나올 때 소멸
- 생존 기간을 결정하는 요인
변수가 선언되는 위치
저장 유형 지정자
- 저장 유형 지정자
auto : 블록을 벗어나면 소멸(생략 가능)
register : 레지스터에 변수를 저장. 지역변수만 가능, 변수의 주소를 구할수 없다. 레지스터 배열은 포인터x
static
extern
volatile 지정자
volatile를 붙이면 컴파일러는 해당 변수를 최적화에서 제외하여 항상 메모리에 접근하도록 만듬
volatile 지정자는 하드웨어가 수시로 변수의 값을 변경하는 경우에 사용
(코드에서는 전혀 변경되지 않는 것처럼 보이지만 하드웨어 장치가 불시에 변경할 수 있는 것)
volatile로 지정된 변수의 값은 문장을 실행할 때마다 메모리에서 읽어야 함
연결
다른 범위에 속하는 변수들을 서로 연결하는 것
- 외부연결 : 전역 변수를 extern을 이용하여 서로 연결
- 내부연결
- 무연결
전역 변수만이 연결을 가질 수 있다.
static이 붙은 함수는 파일 안에서만 사용가능
가변 매개 변수
- 매개 변수의 개수가 가변적응로 변할 수 있는 기능