storage class 라는건 변수의 생성,소멸의 시기, 장소,위치를 결정하는 예약어이다.
보통 생략할 때가 많은데, 이런 경우에는 auto 라는 storage class 로 설정된것이다.
형식>
storage class 자료형 변수명. -> auto float fsum;
종류>
auto - 메모리에서 생성되며, 지역변수이다. 쓰레기값이 초기값으로 들어가며, 함수안에서만 선언가능. 그 함수에서만 사용가능하게 된다.즉 지역변수라는 얘기다.
register - 레지스터에 생성되고, 역시 지역변수.
static - 메모리에 생성되지만, 전역,지역이 가능하다. 초기화가 자동으로 되기때문에 신경쓰지 않아도 되고, 함수밖에서 선언하면 전역, 함수내에서 선언하면 지역변수가 된다.
extern - 역시 메모리에서 생성, 전역.지역다 가능하다. 보통은 여러개의 파일을 묶어 쓸때 (프로젝트로) 사용하며, 단일 파일에서 쓸경우에는 보통 static 을 주로 사용한다.
----------------------------------------------------------------------
예1>
#include <stdio.h>
void ten(int x)
{
auto int a=1;
printf("%d %d",a,x);
} //여기까지 변수 a,x사용
void main()
{
auto int a=10;
{
auto int b=20;
printf("b = %d\n",b);
} // 변수 b의 적용 범위 {} 로 감싸있는 부분에서만 사용가능한 지역변수가 된다.
ten(22);
printf("a = %d\n",a);
printf("b = %d\n",b); //이부분에서 변수 b가 정의 되지 않았다고 에러가 난다.
}
----------------------------------------------------------------------
#include <stdio.h>
static int num = 50; //전역변수로 num을 50으로 초기화.
...
----------------------------------------------------------------------