변수 : 이름, 타입, 크기, 값 + 범위, 생존 시간, 연결
- 범위(scope) : 변수가 사용 가능한 범위, 가시성
- 생존 기간(lifetime) : 메모리에 존재하는 시간
1) 정적 할당(static allocation) : 프로그램이 실행되는 동안 유지 ex) 전역 변수
2) 자동 할당 (automatic allocation) : 선언된 블록이 종료되면 같이 소멸
* 지역 변수는 기본이 '자동 할당' 이지만 저장 유형 지정자를 통해 정적 할당에 사용 가능
- 연결(linkage) : 다른 영역에 있는 변수와 연결 상태
변수의 범위 : 전역 변수 & 지역 변수
- 전역 변수 :
함수 밖에 존재하는 변수로, 사용 범위는 '소스 파일 전체' 이다.
* 전역 변수를 너무 많이 쓰면 코드가 '스파게티'처럼 꼬여 엉망진창이 되므로, 잦은 사용은 지양한다.
- 지역 변수(local variable) :
1) 함수 내부에서만 사용 가능
2) 지역 변수는 선언된 블럭을 나갈 수 없으며, 블록이 마치면 자동 소멸 된다.
3) for문의 경우, 지역변수는 블록이 시작할 때마다 새로 생성되어 초기화된다. (for문을 진행하며 만들어진 값 삭제)
* 블럭이 다르면 변수 이름이 같아도 괜찮다.
저장 유형 지정자
- auto : 자동 변수. 지역 변수에 자동 할당되며, 생략해도 알아서 할당되므로 굳이 auto 지정자를 쓰지 않는다.
ex) auto int count ==> int count
- static :
1) 처음만 초기화하고 매번 호출 때마다 초기화하지 않는다.
2) static을 지역 변수에 붙이면 정적 변수로 변하며 프로그램이 실행되는 동안 값을 유지
- extern :
1) 다른 소스 파일에도 변수를 사용 가능케한다.
* 다른 소스 파일에서 사용이 가능한 만큼 코드가 굉장히 복잡해질 수 있기에 사용하지 않는걸 추천.
2) auto 처럼 보통 생략되어 있다.
#include <stdio.h>
extern void function();
extern char name;
int main(void){
printf(" %c", name);
function();
return 0;
}
- register :
1) 지역 변수에만 사용 가능
2) 변수를 메모리 대신 cpu를 사용하므로 속도가 더 빠르다.
3) cpu 를 쓰기에 사용 갯수에 제한이 있으며, 레지스터는 주소가 없어 &(주소)연산자를 못 쓴다.
<예제>
1~5까지 수에 3을 곱한 배수를 출력하는 프로그램을 제작하시오 (#define 활용)
<해설>
#include <stdio.h>
#define SIZE 5 // 상수
int main(){
int array[SIZE]; // 0, 1, 2, 3, 4
int i;
int count = 0;
for(i=1; count < SIZE; i++){
if(i%3 == 0){
array[count] = i;
count++;
}
}
for(i=0; i<SIZE; i++){
printf("%3d", array[i]);
}
return 0;
}
'C > Definition&Grammar' 카테고리의 다른 글
[C] C 라이브러리 (0) | 2021.03.09 |
---|---|
[C] 표준 라이브러리 함수 (0) | 2021.03.08 |
[C] 스트림 (Stream) (0) | 2021.03.08 |
[C] 함수 (0) | 2021.03.05 |
댓글