산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C의 스토리지 클래스:C의 auto, extern, static, 레지스터 클래스

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

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

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

참고:변수는 데이터 유형, 해당 값뿐만 아니라 스토리지 클래스와도 연관됩니다.

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

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

이 C 자습서에서는 예제와 함께 C에서 다양한 유형의 스토리지 클래스를 배웁니다.

C의 자동 저장 클래스

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

auto 변수의 범위는 특정 블록으로만 제한됩니다. 제어가 블록을 벗어나면 액세스가 파괴됩니다. 이는 auto 변수가 선언된 블록만 접근할 수 있음을 의미합니다.

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 키워드를 사용하여 정의된 변수를 전역 변수라고 합니다. 이러한 변수는 프로그램 전체에서 액세스할 수 있습니다. 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;}

두 번째 파일:original.c

#include <stdio.h>
i=48;

결과:

 value of the external integer is = 48


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

1단계) 새 프로젝트 만들기,

  1. 콘솔 애플리케이션 선택
  2. 이동 클릭

2단계) C를 선택하고 다음을 클릭하십시오.

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

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

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

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

7단계) 새 C 파일 생성 [File -> new -> Empty File , 저장( original.c 로 )하고 대화 상자에서 "확인"을 클릭하여 현재 프로젝트에 추가합니다.

8단계) main() 함수 없이 앞의 예제와 같은 original.c 파일의 C 코드를 넣어 저장합니다.

9단계) 프로젝트를 빌드하고 실행합니다. 결과는 다음 그림과 같습니다.

C의 정적 스토리지 클래스

정적 변수는 함수/파일 내에서 로컬 정적 변수로 사용됩니다. 전역 변수로도 사용할 수 있습니다.

Example: static int count = 10;

정적 변수의 기본 초기값은 0이며 평생 동안 한 번만 초기화됩니다.

#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 키워드를 사용하여 선언하거나 초기화하는 변수는 항상 0을 기본값으로 포함합니다.

C에 스토리지 클래스 등록

이러한 변수에 빠르게 액세스하기 위해 RAM 대신 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 프로그래밍에서 일반적으로 사용되는 각 스토리지 클래스의 주요 기능이 요약되어 있습니다.

스토리지 클래스 선언 저장소 기본 초기값 범위 평생 자동 함수 내부/blockMemoryUnpredictableWithin 함수/blockWithin 함수/블록레지스터 함수/블록 내부 CPU RegistersGarbageWithin the function/blockWithin the function/blockextern 모든 함수 외부MemoryZeroEntire 파일 및 변수가 externprogram 런타임으로 선언된 기타 파일정적(로컬) 함수 내부/blockMemoryZero 내부 함수/블록 프로그램 런타임정적(전역) 모든 기능 외부에서MemoryZeroGlobal프로그램 런타임

요약

이 튜토리얼에서 우리는 요약하기 위해 C의 스토리지 클래스에 대해 논의했습니다.


C 언어

  1. C# 클래스 및 개체
  2. C# 정적 키워드
  3. C# 중첩 클래스
  4. C++ 클래스 및 개체
  5. C++ friend 함수 및 friend 클래스
  6. C++ 클래스 템플릿
  7. C 스토리지 클래스
  8. C - 스토리지 클래스
  9. C++의 스토리지 클래스
  10. C++의 인터페이스(추상 클래스)