Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

C 프로그램의 스토리지 클래스

<시간/>

변수와 데이터 유형은 위에서 논의되었습니다. 이제 범위와 가시성을 기준으로 변수를 분류하는 방법을 살펴보겠습니다.

범위:일반적으로 범위는 변수의 수명을 나타내는 용어입니다. 얼마나 오래 작동하며 언제 파괴될 것입니다.

가시성 :가시성은 변수가 보이는 위치에서 변수를 사용할 수 있는 위치를 보여줍니다. 예를 들어 지역 변수를 사용하는 경우 다른 함수나 파일에서 사용할 수 없으므로 블록 내에서만 볼 수 있습니다.

차단 :블록은 두 개의 중괄호 {…} 사이의 라인 집합으로 정의됩니다. 예를 들어

{
   //line1
   //line2
   //line3
}

이것은 블록입니다.

스토리지 클래스 선언 방법 범위 가시성
자동 전 세계

자동 로컬 차단 차단
등록 전 세계

등록 로컬 차단 차단
정적 전 세계 프로그램 파일
정적 로컬 프로그램 차단
외부 전 세계 프로그램 프로그램
외부 로컬 프로그램 차단

스토리지 클래스의 기본 구문:

<storage class> <datatype> variable_name;
ex. static int my_var = 0;

참고: variable_name과 같이 사용하는 경우; 스토리지 클래스를 지정하지 않으면 자동으로 '자동' 스토리지 클래스가 됩니다.

자동:자동 스토리지 클래스는 모든 로컬 변수에 대한 기본 스토리지 클래스입니다.

{
   int mount;
   auto int month;
}

위의 예는 동일한 스토리지 클래스에 있는 두 개의 변수를 정의합니다. 'auto'는 함수 내에서만 사용할 수 있습니다. 즉, 지역 변수입니다.

등록 :레지스터 스토리지 클래스는 RAM 대신 레지스터에 저장되어야 하는 로컬 변수를 정의하는 데 사용됩니다. 이는 변수의 최대 크기가 레지스터 크기(보통 한 단어)와 같고 단항 '&' 연산자를 적용할 수 없음을 의미합니다(메모리 위치가 없기 때문에).

{
   register int miles;
}

레지스터는 카운터와 같이 빠른 액세스가 필요한 변수에만 사용해야 합니다. 또한 '레지스터'를 정의한다고 해서 변수가 레지스터에 저장되는 것은 아니라는 점에 유의해야 합니다. 이는 하드웨어 및 구현 제한 사항에 따라 레지스터에 저장될 수 있음을 의미합니다.

정적 :정적 스토리지 클래스는 범위에 들어오고 나갈 때마다 로컬 변수를 생성 및 삭제하는 대신 프로그램의 수명 동안 로컬 변수를 유지하도록 컴파일러에 지시합니다. 따라서 지역 변수를 정적으로 만들면 함수 호출 간에 값을 유지할 수 있습니다.

정적 수정자는 전역 변수에도 적용될 수 있습니다. 이 작업이 완료되면 해당 변수의 범위가 선언된 파일로 제한됩니다.

C 프로그래밍에서 static이 전역 변수에 사용되면 해당 클래스의 모든 개체에서 해당 멤버의 복사본 하나만 공유하게 됩니다.

예시 코드


#include <stdio.h>
/* function declaration */
void func(void);
static int count = 5; /* global variable */
main() {
   while(count--) {
      func();
   }
   return 0;
}
/* function definition */
void func( void ) {
   static int i = 5; /* local static variable */
   i++;
   printf("i is %d and count is %d\n", i, count);
}

출력

i is 6 and count is 4
i is 7 and count is 3
i is 8 and count is 2
i is 9 and count is 1
i is 10 and count is 0

외부 :extern 스토리지 클래스는 모든 프로그램 파일에서 볼 수 있는 전역 변수의 참조를 제공하는 데 사용됩니다. 'extern'을 사용하면 변수를 초기화할 수 없지만 변수 이름은 이전에 정의된 저장 위치를 ​​가리킵니다.

여러 파일이 있고 다른 파일에서도 사용될 전역 변수 또는 함수를 정의하면 extern이 정의된 변수 또는 함수의 참조를 제공하기 위해 다른 파일에서 사용됩니다. 이해를 돕기 위해 extern은 다른 파일에서 전역 변수나 함수를 선언하는 데 사용됩니다.

extern 수정자는 아래에 설명된 것과 같이 동일한 전역 변수 또는 기능을 공유하는 두 개 이상의 파일이 있을 때 가장 일반적으로 사용됩니다.

예시 코드(main.c):

#include <stdio.h>
int count ;
extern void write_extern();
main() {
count = 5;
write_extern();
}
Example Code (support.c):
#include <stdio.h>
extern int count;
void write_extern(void) {
printf("count is %d\n", count);
}

출력

count is 5