스토리지 클래스
C언어에서 기억 영역을 분류하기 위해 사용되는 언어로, 일반적으로 기억 영역 분류라고 번역됨
객체 지향의 클래스와는 관련 없음
auto, register, static, extern의 네 가지 종류로 나눠짐(각 키워드는 상호 배타적: 두 가지 이상의 키워드 함께 사용 X)
1. auto
지역 변수 선언 시 아무것도 지정하지 않았을 때 기본값으로 지정되는 클래스
사용할 일 거의 없음
2. register
변수를 메모리 대신 *레지스터에 저장하고 싶을 때 사용 but 반드시 레지스터에 저장되는 것은 X
메모리에 만들어진 변수가 아니므로 주소 연산자 '&' 사용 불가능
변수의 크기가 **레지스터 사이즈보다 작아야 함
최근의 컴파일러들은 알아서 레지스터를 잘 활용하기 때문에 이 지시자를 무시할 확률이 높음 -> 사용할 일 거의 없음
*메모리/레지스터: 사용 목적은 같으나(데이터 저장) 레지스터가 CPU에 더 가까워서 메모리보다 빠름
**레지스터 사이즈: 컴퓨터에서 연산의 기본 단위가 되는 정보의 양으로 단위는 워드
일반적으로 1 word는 32 bit(4 byte, full-word) 또는 16 bit(half-word)
3. static
static을 사용해 지역 변수를 scope 밖에서도 사용할 수 있음(다른 함수에서 접근이 가능해지는 것은 X)
전역 변수에서도 사용 가능 -> 해당 변수의 scope를 선언된 파일 내로 제한
*지역 변수: 특정 { } 내에서만 사용 가능
**전역 변수: 함수/메서드 외부에서 선언된 변수
4. extern
다른 파일에서 정의된 전역 변수나 함수에 접근할 수 있게 참조(reference)를 제공해 주는 지시자
ex. file1의 전역 변수 a를 file2의 main에서 사용할 때 extern int a;로 선언
extern으로 선언된 전역 변수는 초기화 불가능(사전에 정의된 전역변수의 사용을 알리는 역할만 함)
즉, extern은 사용을 선언할 때 쓰는 지시자
참조
'Programming Language > C' 카테고리의 다른 글
[C] 특정 규칙에 따라 문자열을 숫자로 변환하기 (0) | 2024.03.18 |
---|---|
[C] 구조체 struct (0) | 2024.03.13 |
[C] 포인터 선언과 역참조 (0) | 2024.03.11 |
[C] 포인터 연산 (0) | 2024.03.11 |
[C] 실수 자료형 float, double 소수점 출력 범위 지정 (1) | 2024.03.06 |