C의 스토리지 클래스: Auto, Extern, Static, Register(예)

C의 스토리지 클래스란 무엇입니까?

저장 클래스는 변수의 가시성과 위치를 나타냅니다. 코드의 어느 부분에서 변수에 액세스할 수 있는지 알려줍니다. C에서 저장 클래스는 다음과 같은 사항을 설명하는 데 사용됩니다.

  • 변수 범위.
  • 변수가 저장될 위치입니다.
  • 변수의 초기화된 값입니다.
  • 변수의 수명.
  • 누가 변수에 접근할 수 있나요?

따라서 스토리지 클래스는 변수에 대한 정보를 나타내는 데 사용됩니다.

알림: 변수는 단지 변수와 연관되어 있는 것이 아닙니다. 데이터 형식, 그 가치뿐만 아니라 저장 클래스이기도 합니다.

C의 스토리지 클래스 유형은 무엇입니까?

표준 스토리지 클래스에는 총 XNUMX가지 유형이 있습니다. 아래 표는 C의 저장소 클래스를 나타냅니다.

스토리지 클래스 목적
자동 기본 스토리지 클래스입니다.
외부 전역 변수입니다.
정적 인 함수 호출로 제어가 넘어가는 경우에도 값을 반환할 수 있는 지역변수입니다.
회원가입 레지스터 내부에 저장되는 변수입니다.

C의 자동 스토리지 클래스

자동 저장소 클래스를 사용하여 정의된 변수를 지역 변수라고 합니다. Auto는 자동 스토리지 클래스를 의미합니다. 변수는 명시적으로 지정되지 않은 경우 기본적으로 자동 스토리지 클래스에 있습니다.

자동 변수의 범위는 특정 블록으로만 제한됩니다. 제어가 블록 밖으로 나가면 액세스가 파괴됩니다. 즉, 자동 변수가 선언된 블록에서만 액세스할 수 있습니다.

auto 키워드는 자동 스토리지 클래스를 정의하는 데 사용됩니다. 기본적으로 자동 변수에는 가비지 값이 포함되어 있습니다.

Example, auto int age;

아래 프로그램은 두 개의 지역 변수가 있는 함수를 정의합니다.

int add(void) {
   int a=13;
   auto int b=48;
return a+b;}

우리는 서로 독립적인 각 블록 코드의 자동 변수에 대한 범위 수준 "가시성 수준"을 보여주는 또 다른 프로그램을 사용합니다.

#include <stdio.h>
int main( )
{
  auto int j = 1;
  {
    auto int j= 2;
    {
      auto int j = 3;
      printf ( " %d ", j);
    }
    printf ( "\t %d ",j);
  }
  printf( "%d\n", j);}

산출:

 3 2 1

C의 외부 스토리지 클래스

Extern은 외부 스토리지 클래스를 나타냅니다. Extern 스토리지 클래스는 두 개 이상의 파일 간에 공유되는 전역 함수나 변수가 있을 때 사용됩니다.

키워드 외부 원래 파일에 이미 정의된 변수나 함수에 대한 참조를 제공하기 위해 다른 파일에서 전역 변수나 함수를 선언하는 데 사용됩니다.

extern 키워드를 사용하여 정의된 변수를 전역 변수라고 합니다. 이러한 변수는 프로그램 전체에서 액세스할 수 있습니다. extern 변수는 초기화할 수 없으며 원본 파일에 이미 정의되어 있습니다.

Example, extern void display();

첫 번째 파일: main.c

#include <stdio.h>
extern i;
main() {
   printf("value of the external integer is = %d\n", i);
   return 0;}

두 번째 파일: 원본.c

#include <stdio.h>
i=48;

결과 :

 value of the external integer is = 48


위의 코드를 컴파일하고 실행하려면 다음 단계를 따르세요.

단계 1) 새 프로젝트를 생성하고,

  1. 콘솔 애플리케이션 선택
  2. 이동을 클릭하십시오.

C의 외부 스토리지 클래스

단계 2) C를 선택하고 다음을 클릭하세요.

C의 외부 스토리지 클래스

단계 3) 다음을 클릭하십시오.

C의 외부 스토리지 클래스

단계 4) 세부 정보를 입력하고 다음을 클릭하세요.

C의 외부 스토리지 클래스

단계 5) 마침을 클릭하십시오.

C의 외부 스토리지 클래스

단계 6) main.c 파일에 이전 프로그램에서 본 메인코드를 넣고 저장한다.

C의 외부 스토리지 클래스

단계 7) 새 C 파일을 만듭니다[파일 -> 새로 만들기 -> 빈 파일], (원래.c라는 이름으로) 저장하고 대화 상자에서 "확인"을 클릭하여 현재 프로젝트에 추가합니다.

C의 외부 스토리지 클래스

단계 8) main() 함수 없이 앞선 예제에 나온 원본.c 파일의 C 코드를 넣어서 저장합니다.

C의 외부 스토리지 클래스

단계 9) 프로젝트를 빌드하고 실행하세요. 결과는 다음 그림에 나와 있습니다.

C의 외부 스토리지 클래스

C의 정적 스토리지 클래스

정적 변수는 함수/파일 내에서 로컬 정적 변수로 사용됩니다. 그들은 또한로 사용될 수 있습니다 전역 변수

  • 정적 지역 변수는 함수 호출이나 블록 간에 값을 유지하고 저장하며 정의된 함수나 블록에만 표시되는 지역 변수입니다.
  • 정적 전역 변수는 표시되는 전역 변수입니다. 선언된 파일에만 적용됩니다.
Example: static int count = 10;

정적 변수의 기본 초기 값은 XNUMX이고 수명 동안 한 번만 초기화된다는 점을 기억하세요.

#include <stdio.h> /* function declaration */
void next(void);
static int counter = 7; /* global variable */
main() {
 while(counter<10) {
      next();
      counter++;   }
return 0;}
void next( void ) {    /* function definition */
   static int iteration = 13; /* local static variable */
   iteration ++;
   printf("iteration=%d and counter= %d\n", iteration, counter);}

결과 :

iteration=14 and counter= 7
iteration=15 and counter= 8
iteration=16 and counter= 9

전역 변수는 파일 전체에서 액세스할 수 있는 반면 정적 변수는 코드의 특정 부분에서만 액세스할 수 있습니다.

정적 변수의 수명은 전체 프로그램 코드에 있습니다. static 키워드를 사용하여 선언되거나 초기화되는 변수는 항상 기본값으로 XNUMX을 포함합니다.

C에 스토리지 클래스 등록

대신 CPU 레지스터의 함수나 블록 내에 지역 변수를 저장하려는 경우 레지스터 스토리지 클래스를 사용할 수 있습니다. 이러한 변수에 빠르게 액세스할 수 있습니다. 예를 들어, "카운터"는 레지스터에 저장하기에 좋은 후보입니다.

Example: register int age;

키워드 회원가입 레지스터 저장 클래스를 선언하는 데 사용됩니다. 레지스터 저장소 클래스를 사용하여 선언된 변수는 프로그램 전체에서 수명을 갖습니다.

자동 저장 클래스와 유사합니다. 변수는 특정 블록으로 제한됩니다. 유일한 차이점은 레지스터 스토리지 클래스를 사용하여 선언된 변수가 메모리 대신 CPU 레지스터 내부에 저장된다는 것입니다. 레지스터는 주 메모리보다 더 빠르게 접근할 수 있습니다.

레지스터 스토리지 클래스를 사용하여 선언된 변수에는 기본값이 없습니다. 이러한 변수는 프로그램 시작 부분에 선언되는 경우가 많습니다.

#include <stdio.h> /* function declaration */
main() {
{register int  weight;
int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/}
}

산출:

error: address of register variable 'weight' requested

다음 표는 C 프로그래밍에서 일반적으로 사용되는 각 저장 클래스의 주요 기능을 요약한 것입니다.

스토리지 클래스 선언 스토리지 기본 초기값 범위 수명
자동 함수/블록 내부 메모리 예측할 수없는 함수/블록 내에서 함수/블록 내에서
회원가입 함수/블록 내부 CPU 레지스터 찌꺼기 함수/블록 내에서 함수/블록 내에서
외부 모든 기능 외부 메모리 제로 변수가 extern으로 선언된 파일 전체 및 기타 파일 프로그램 런타임
정적(로컬) 함수/블록 내부 메모리 제로 함수/블록 내에서 프로그램 런타임
정적(전역) 모든 기능 외부 메모리 제로 글로벌 프로그램 런타임

요약

이 튜토리얼에서는 C의 스토리지 클래스에 대해 요약하여 설명했습니다.

  • C의 저장소 클래스는 변수에 대한 추가 정보를 나타내는 데 사용됩니다.
  • 스토리지 클래스는 변수의 범위와 수명을 나타냅니다.
  • 또한 누가 변수에 접근할 수 있는지, 어디에서 접근할 수 있는지 알려줍니다.
  • Auto, extern, Register, Static은 C 프로그램의 네 가지 스토리지 클래스입니다.
  • 스토리지 클래스 지정자 C 언어 변수, 함수, 매개변수를 정의하는 데 사용됩니다.
  • auto는 블록이나 함수 내에 정의된 지역 변수에 사용됩니다.
  • 레지스터는 빠른 액세스를 위해 메모리 위치가 아닌 CPU 레지스터에 변수를 저장하는 데 사용됩니다.
  • static은 전역 변수와 지역 변수 모두에 사용됩니다. 각각은 C 프로그램 내에서 사용 사례를 갖습니다.
  • Extern은 C 프로젝트 파일 간의 데이터 공유에 사용됩니다.