<스토리지 클래스> : 기억 부류
변수나 함수를 선언할 때 사용되는 키워드
저장 위치와 사용 범위를 결정
변수나 함수 선언 시 맨 앞에 지정
변수의 디폴트 기억 부류는 auto이고, 함수의 디폴트 기억 부류는 extern
-형식:
기억부류 데이터형 변수명;
기억부류 리턴형 함수형(매개변수 리스트);
<auto 변수>
- 지역 변수는 자동 변수임
- 지역 변수는 디폴트로 auto 기억 부류를 사용 (전역 변수에는 auto 지정 불가)
auto 지역 변수는 선언된 위치에서 자동으로 생성되고, 선언된 블록을 빠져나갈 때 자동으로 해제됨
ex) auto int x =10 ; 이런식으로 원래는 다 auto가 생략되는 것
- for 루프에서 선언 시 루프 내에서만 통용
<register 변수>
- 변수를 메모리에 할당하는 대신 CPU의 레지스터에 할당
cf) 레지스터에 할당하면 변수에 좀 더 빠르게 접근, 액세스 속도가 빨라짐
- 보통 루프 제어 변수를 레지스터 변수로 선언
- register 변수로 선언해도 변수가 레지스터에 할당되지 않을 수 있음 ( 일정 개수 넘어가면 다 차서, 일반적으로 2,4,6개등 시스템마다 다름)
- 레지스터 변수에 대해서는 주소 구하기 연산자를 사용할 수 없음: 레지스터 변수의 주소는 구할 수 없으므로 에러
<global 변수>
- 다른 곳에 선언된 변수에 대하여 별도의 메모리 할당 없이 해당 변수를 사용
- 전역 변수를 코드 중간에 선언하면, 전역 변수가 선언된 뒤쪽에 정의된 함수에서만 전역 변수를 사용 가능
- 전방 선언(Forward Declaration): 전역 변수에 대한 extern 선언이 있으면 전역 변수가 선언된 위치와 관계없이 전역 변수 사용 가능 ('외부에 있는 거 참조하시오'라는 뜻)
- 다른 파일에서도 사용 가능
<static: 정적 변수> 기억 장소에 남아있는..!!
· 정적 지역 변수
- 번역 과정의 마지막 단계인 적재 시간에 기억 장소를 할당받는 변수
- 전체 프로그램의 시작부터 종료까지를 생존 기간으로 하며 동일 기억 장소를 유지
- 초기화는 기억 공간 할당 시 한 번만 초기화됨 (처음에 한번만) (누적 유지)
- 정적 지역 변수는 전역 변수처럼 프로그램이 시작할 때 메모리에 할당되고 프로그램이 종료할 때 해제
- 전역 변수와는 달리 정적 지역 변수는 선언된 함수 안에서만 사용
- 정적 지역 변수는 함수가 리턴하더라도 해제되지 않고 남아있다가 그 다음 함수 호출 시 그대로 다시 이용
· 정적 전역 변수
- 정적 전역 변수는 정적 전역 변수가 선언된 소스 파일에서만 사용
- 정적 전역 변수는 전역 변수를 다른 소스 파일에서 접근하지 못하도록 제한
<스토리지 클래스의 비교>
- 일반 지역 변수는 초기화하지 않았을 때 쓰레기 값을 가짐, 나머지는 0으로 초기화인데!!
'C언어' 카테고리의 다른 글
C언어 - 전처리기, 매크로, 조건부 컴파일 (0) | 2021.07.10 |
---|---|
C언어 - 포인터 배열 (0) | 2021.07.10 |
C언어- 함수의 인자 (0) | 2021.07.09 |
C언어 - 공용체와 열거체 (0) | 2021.07.09 |
C언어 - 구조체 (0) | 2021.07.09 |