본문 바로가기

프로그래밍/C 프로그래밍

[C언어] 기억클래스

#기억클래스(storage class)

  • 변수를 기억공간의 특정영역에 할당하는 방법
  • 변수의 사용위치에 따라
    • 지역 / 전역 변수
  • 변수의 존속기간에 따라
    • 자동변수/정적변수/외부변수/레지스터변수
  • 전역변수: 함수 밖이나 외부파일에서 선언되어 프로그램 전체에 걸쳐 사용될 수 있는 변수
    • 동일 범위 내에서는 지역변수가 우선
    • 전역변수의 선언은 프로그램 선두에 위치
    • 가급적 지역변수 사용하는 것이 효율적
      • 함수의 독립성 향상, 디버깅 효율 향상, 기억공간 절약

# 자동변수

  • 함수 실행시 만들어지게 되고, 실행이 끝나면 기억공간이 제거됨
  • 예약어 auto 사용(생략 가능)
  • 통용 범위는 변수가 선언된 블록이나 함수 내로 한정
  • 지역변수에 해당
  • 초기화가 필요

# 정적 변수

  • 기억영역이 프로그램 끝날 때까지 유지
  • 예약어 static 사용
  • 전역 변수에 해당
  • 변수의 값은 프로그램 실행 중 계속유지
    • 자동변수는 해당 블록 벗어나면 값을 상실하지만, 정적변수는 값 유지
  • 초기화가 없으면 0으로 초기화됨.

# 외부변수

  • 함수의 외부에서 선언
  • 예약어 extern 사용
  • 전역 변수에 해당
  • 초기화가 없으면 0으로 초기화됨
  • 다른 파일에서 외부변수로 선언된 변수의 값 참조
#include <stdio.h>

int i = 0;
int j = 20;

int main(){
	extern int i; //i가 선언되면 선언된 위치 이하부터 값 유효 - 생략 가능 
	extern int k; // 변수k가 범위 바깥에 있으므로 생략 불가
	
	int j = 100;
	
	printf("i = %d j = %d k = %d", i, j, k);
}
int k = 50;

//i = 0 j = 100 k = 50
#include <stdio.h>

int extern_ex(); //원형 선언
char s[100]; //전역변수 선언
int main(){
	printf("문자열입력:");
	scanf("%s", s);
	printf("입력 문자열 %s는 전역변수 s에 저장\n", s);
	extern_ex();
} 


#include <stdio.h>
extern char s[]; 
int extern_ex() {
	printf("외부 변수s값은 %s입니다. \n", s);
}

 

# 레지스터 변수

  • CPU 내의 레지스터에 자료를 저장하고자 할 때
  • 예약어 register 사용
  • 자동 변수와 동일한 속성
  • 프로그램 실행속도 증가를 목적으로 사용(주로 반복문에서 카운터 변수로 사용)
#include <stdio.h>

int main(){
	register int i;
	int sum = 0;
	
	for(i=0;i<=10;i++)
		sum+=i; //레지스터변수를 반복문 카운터 변수로 사용
	i-=1;
	
	printf("i = %d sum = %d", i, sum); 
}
반응형

'프로그래밍 > C 프로그래밍' 카테고리의 다른 글

[C언어] typedef  (0) 2024.06.06
[C언어] 파일 입출력  (0) 2024.06.06
[C언어] 메모리 동적 할당  (1) 2024.06.06
[C언어] 파일처리함수  (0) 2024.06.06
[C언어] 구조체와 공용체  (0) 2024.06.06