C 스토리지 클래스


스토리지 클래스는 C 프로그램에서 변수/함수의 범위(가시성)와 수명 주기를 정의합니다. 이러한 지정자는 수정하는 유형 앞에 배치됩니다. C 프로그램에서 사용할 수 있는 저장소 클래스는 다음과 같습니다.

auto 저장소 클래스

auto 저장소 클래스는 모든 지역 변수에 대한 기본 저장소 클래스입니다.

{   int mount;   auto int month;}

위의 예에서는 동일한 저장소 클래스를 가진 두 개의 변수를 정의합니다. Auto는 함수 내에서만 사용할 수 있습니다. 즉, auto는 로컬 변수만 수정할 수 있습니다.

register 스토리지 클래스

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

{   register int  miles;}

레지스터는 카운터와 같이 빠르게 액세스해야 하는 변수에만 사용됩니다. 또한 '레지스터'를 정의한다는 것은 변수가 레지스터에 저장된다는 의미가 아니라, 하드웨어 및 구현 제한에 따라 변수가 레지스터에 저장될 수 있다는 의미라는 점에 유의해야 합니다.

정적 저장소 클래스

static 저장소 클래스는 범위에 들어오고 나갈 때마다 지역 변수를 만들고 삭제할 필요 없이 프로그램 수명 동안 지역 변수를 유지하도록 컴파일러에 지시합니다. 따라서 static을 사용하여 지역 변수를 수정하면 함수 호출 간에 해당 값이 유지됩니다.

정적 수정자는 전역 변수에도 적용될 수 있습니다. static이 전역 변수를 수정하면 변수의 범위가 선언된 파일로 제한됩니다.

C 프로그래밍에서 static을 클래스 데이터 멤버에 사용하면 해당 멤버의 복사본 하나만 클래스의 모든 개체에서 공유됩니다.

#include <stdio.h> /* 函数声明 */void func(void); static int count = 5; /* 全局变量 */
 main(){   while(count--)   {
      func();   }   return 0;}/* 函数定义 */void func( void ){   static int i = 5; /* 局部静态变量 */
   i++;

   printf("i is %d and count is %d\n", i, count);}

아마도 이 예제는 함수와 전역 변수를 사용했는데, 이 두 가지 개념은 지금까지 설명되지 않았기 때문에 아직 이해하지 못하실 수도 있습니다. 지금은 완전히 이해하지 못하더라도 다음 장에서 자세히 설명하겠습니다. 위 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다.

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

extern 저장소 클래스

extern 저장소 클래스는 모든 프로그램 파일에 표시되는 전역 변수에 대한 참조를 제공하는 데 사용됩니다. 초기화할 수 없는 변수에 대해 'extern'을 사용하면 변수 이름은 이전에 정의된 저장 위치를 ​​가리킵니다.

여러 파일이 있고 다른 파일에서 사용할 수 있는 전역 변수나 함수를 정의하는 경우 다른 파일에서 extern을 사용하여 정의된 변수나 함수에 대한 참조를 얻을 수 있습니다. extern은 다른 파일에서 전역 변수나 함수를 선언하는 데 사용되는 것으로 이해할 수 있습니다.

extern 수정자는 일반적으로 아래와 같이 동일한 전역 변수나 함수를 공유하는 두 개 이상의 파일이 있을 때 사용됩니다.

첫 번째 파일: main.c

#include <stdio.h> int count ;extern void write_extern();
 main(){
   count = 5;
   write_extern();}

두 번째 파일: support.c

#include <stdio.h> extern int count; void write_extern(void){
   printf("count is %d\n", count);}

여기서 두 번째 파일의 extern 키워드는 첫 번째 파일인 main.c에 이미 정의된 count를 선언하는 데 사용됩니다. 이제 이 두 파일을 다음과 같이 컴파일하세요.

 $gcc main.c support.c

이렇게 하면 a.out 실행 프로그램이 생성되고, 프로그램이 실행되면 다음과 같은 결과가 생성됩니다.

5