1. 지역 변수와 전역 변수
1) 지역 변수
- 지역 변수는 선언된 블록이 끝나면 자동으로 소멸된다.
- 반복문 블록 내 지역 변수의 경우, 반복될 때마다 초기화된다.
- 초기화되지 않은 지역 변수는 쓰레기값을 같은다.
- 매개 변수도 일종의 지역 변수이다.
2) 전역 변수
- 자동으로 0으로 초기화된다.
#include <Stdio.h>
int x; // x를 전역 변수로 설정
void sub();
int main()
{
for (int x = 0; x < 10; x++)
sub();
}
void sub()
{
for (int x = 0; x < 10; x++)
printf("*");
}
- x는 전역 변수이므로 모든 함수에서 같은 값을 공유한다.
2. 생존 기간 - 저장 유형 지정자
1) auto : 자동 변수
- 함수가 시작되면 생성, 끝나면 소멸
- 지역 변수는 auto가 생략되어도 자동 변수가 된다.
2) static : 정적 변수
- 블록이 끝나도 기존의 값을 유지한다.
- 자동으로 0으로 초기화된다.
3) extern : 외부 변수
- 다른 소스 파일에 선언된 전역 변수를 불러온다.
- 전역 변수 자체를 선언하는 것은 아니다.
4) register : 레지스터 변수
- CPU의 일부인 레지스터에 변수를 저장한다.
- 데이터를 읽고 쓰는 속도가 약 15배 정도 빠르다.
5) volatile
- 하드웨어가 수시로 변수의 값을 변경하는 경우에 사용한다.
- 컴파일러는 해당 변수를 최적화에서 제외한다.