본문 바로가기
C/Definition&Grammar

[C] 변수

by 꾸압 2021. 3. 8.

변수 : 이름, 타입, 크기, 값 + 범위, 생존 시간, 연결

- 범위(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

댓글