변수명 작성 규칙
- 영문자, 숫자, under bar를 사용할 수 있다.
- 첫 글자에는 숫자가 올 수 없다.
기억 클래스 (Storage Class)
변수를 메모리 내에 어디에 저장할 지를 결정하는 작업
-
auto
말 그대로 따로 기억 클래스를 지정하지 않으면 자동으로 auto 클래스로 지정이 된다.
함수나 블록의 내에서만 유효하며, 범위를 벗어나면 자동으로 소멸됨.
메모리의 스택영역에 저장된다.
-
register
변수를 메모리에 저장하는 것이 아니라, cpu내의 레지스터에 저장함.
함수나 블록 내에서만 유효하며, 범위를 벗어나면 자동으로 소멸된다.
cpu가 코드를 처리할 때 메모리에서 레지스터로 변수 값들을 읽어오는 과정을 거치는데, 이러한 과정을 생략할 수 있으므로 처리속도가 빨라진다.
레지스터가 꽉차 레지스터에 변수를 잡을 수 없는 경우 auto로 처리됨.
메모리가 아닌 레지스터에 저장되므로 메모리 주소를 구하는 &연산자 사용불가.
- static
함수나 블록 외부에서도 값이 소멸하지 않는다.
초기화 생략 시 자동으로 0으로 초기화 됨.(추측, 데이터 영역에 저장되니까..?)
- 내부 정적변수: 함수나 블록 내에서 정적 변수가 선언됨. 따라서 변수 선언 범위 내에서만 사용가능.
- 외부 정적 변수: 함수나 블록 외부에서 선언. 글로벌 변수랑 다른점이...?
- extern
외부변수.
외부의 코드파일에서 변수를 참조할 수 있는 기억클래스이다.
cf) global변수에 static과 extern을 사용하는 목적
- static int sg =7;
: 현재 파일에서만 사용하는 sg라는 글로벌 변수를 선언, 다른 파일에서 같은 이름의 sg라는 글로벌 변수를 사용하더라도 둘은 다르게 처리됨.
- extern int eg = 7;
: 외부파일과 공유하는 eg라는 글로벌 변수. 다른 파일의 코드가 eg를 업데이트하면 현재파일에서도 업데이트가 반영된다.(당연함. 같은 메모리 공간을 바라보고 있으므로)
요약
- 변수명 작성 규칙
: 영 대소문자, 숫자, under_bar를 사용할 수 있다. 단, 첫 문자에 숫자는 불가능
- 기억 클래스(storage class)
- auto: 기본 설정
- register: cpu 내 레지스터에 저장
- extern: 외부변수, 외부파일에서 정의된 변수를 reference
- static: 프로세스 종료 전까지 변수가 살아 있음. scope 내부에서만 사용가능.