while (1): study();
[C언어] 변수의 종류 본문
728x90
1. 지역 변수(Local variable)
= 자동 변수(Auto variable)
#include <stdio.h>
void assign(void);
int main(void)
{
auto int a = 0; # 지역변수 할당은 auto 예약어(생략 가능) 사용
assign();
printf("main 함수 a: %d\n", a); # 0을 반환
return 0;
}
void assign(void)
{
int a;
a = 10;
printf("assign 함수 a: %d\n", a); # 10을 반환
}
특징
- 사용 범위가 블록 내부로 제한되므로 다른 함수에서는 사용할 수 없다.
- 이름이 같아도 선언된 함수가 다르면 각각 독립된 저장공간을 갖는다.
- 메모리를 효율적으로 사용한다.
- 디버깅에 유리하다.
- 사용 가능한 변수가 둘 이상이면 가장 가까운 블록에 선언된 변수를 사용한다.
2. 전역 변수(Global variable)
#include <stdio.h>
void assign10(void);
void assign20(void);
int a; # 전역 컨텍스트에서 관리되는 변수
int main(void)
{
printf("함수 호출 전 a : %d\n", a); # 기본값 0 출력
assign10();
assign20();
printf("함수 호출 후 a : %d\n", a); # 20 출력
return 0;
}
void assign10(void)
{
a = 10;
}
void assign(void)
{
a = 20;
}
특징
- 관리 및 디버깅이 어려움
3. 정적 지역 변수(Static variable)
#include <stdio.h>
void auto_func(void);
void static_func(void);
int main(void)
{
int i;
printf("일반 지역 변수(auto)를 사용한 함수\n");
for (i = 0; i < 3; i++)
{
auto_func(); # 1, 1, 1 출력
}
printf("정적 지역 변수(static)을 사용한 함수\n");
for (i = 0; i < 3; i++)
{
static_func(); # 1, 2, 3 출력
}
return 0;
}
void auto_func(void)
{
auto int a = 0;
a++;
printf("%d\n", a);
}
void static_func(void)
{
static int a; # 초기화하지 않을 시 기본값 0
a++;
printf("%d\n", a);
}
특징
- 선언된 함수가 반환되더라도 그 저장 공간을 계속 유지한다
- 일반 지역 변수와 같이 사용 범위는 블록 내부로 제한된다.
4. 레지스터 변수(Register variable)
#include <stdio.h>
int main(void)
{
register int i;
auto int sum = 0;
for (i = 1; i <= 10000; i++)
{
sum += 1;
}
printf("%d\n", sum);
return 0;
}
특징
- 사용횟수가 많은 변수를 레지스터에 할당하여 실행시간을 단축한다.
- 전역 변수는 레지스터 변수로 선언할 수 없다.
- 주소를 구할 수 없다.
- 레지스터 사용 여부는 컴파일러가 최종 결정한다.
728x90
'학습 > C, C++' 카테고리의 다른 글
성적 처리 프로그램 (0) | 2021.12.14 |
---|---|
소수 계산 프로그램 (0) | 2021.12.13 |
프로필 교환 프로그램 (0) | 2021.12.12 |
[C언어]특별한 포인터 (0) | 2021.12.11 |
가로 세로의 합 구하기 (0) | 2021.12.09 |