C의 스토리지 클래스: 다양한 유형의 스토리지 클래스 [예제 포함]

게시 됨: 2020-10-21

C로 코딩하는 것은 모든 프로그램에서 변수를 사용하는 데 중점을 두고 있습니다. 이것이 C 프로그래밍의 주요 측면입니다. C의 모든 변수에는 두 가지 속성이 있습니다. 유형 및 스토리지 클래스. 그 중 타입은 변수의 데이터 타입을 말하며, C의 스토리지 클래스 는 변수 의 범위, 수명, 가시성을 결정한다. C의 스토리지 클래스는 수명, 가시성, 메모리 위치 및 변수의 초기 값을 찾는 데 사용됩니다.

이 블로그 포스트에서 우리는 C의 스토리지 클래스 , 그 유형, 그리고 그 특성이 몇 가지 프로그래밍 예제와 함께 프로그램의 출력에 어떻게 영향을 미치는지 자세히 살펴볼 것입니다. C의 스토리지 클래스는 변수 정보를 나타내는 데 사용됩니다.

Swiggy, Quora, IMDB 등과 같은 애플리케이션을 빌드하는 방법을 배우십시오.

목차

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

C의 저장소 클래스 는 메모리에 유지될 변수의 저장소 영역을 할당합니다. 시스템의 RAM에 저장됩니다. 저장 공간 외에도 변수의 범위를 결정합니다. C 프로그램의 변수는 주로 장치의 메모리와 CPU 레지스터인 랜덤 메모리의 물리적 위치에 저장됩니다.

C의 스토리지 클래스는 또한 변수의 수명을 정의하고 이를 '로컬' 또는 '글로벌'이라고 합니다. 저장소 클래스는 범위 또는 가시성과 변수의 초기 값을 정의하는 데에도 유용합니다. C 에는 주로 4가지 스토리지 클래스가 있습니다. 자동 , 레지스터 , 정적 외부 . 우리는 하나하나 더 논의할 것입니다.

C의 스토리지 클래스는 어떻게 선언됩니까?

C 의 4가지 스토리지 클래스 는 블록 또는 프로그램에서 스토리지 클래스 지정자 auto, register, extern, static으로 선언됩니다. 구문 형식으로 사용되는 스토리지 클래스 지정자 'typedef'가 하나 더 있으며 스토리지를 예약하지 않습니다. 지정자는 변수를 저장하도록 컴파일러에 지시합니다. C의 외부 저장소 클래스는 정의된 변수가 외부 연결로 선언되었음을 컴파일러에 알립니다.

변수를 정의하는 것과 선언하는 것 사이에는 중요한 차이점이 있습니다. 변수를 정의한다는 것은 변수에 대한 메모리를 할당하는 것이고 선언한다는 것은 값으로 초기화하는 것을 의미합니다.

통사론:

storage_class_specifier 데이터 유형 변수 이름;

읽기: C# 초보자를 위한 흥미로운 프로젝트 아이디어 및 주제

특별한 경우: 저장 클래스 지정자가 프로그램에서 선언되거나 정의되지 않은 경우

변수 선언에 하나 이상의 스토리지 클래스 지정자가 제공됩니다. 단, 스토리지 클래스 지정자가 지정되지 않은 경우에는 다음과 같은 규칙을 따릅니다.

1. 함수 내에서 선언된 변수는 자동으로 간주됩니다.

2. 함수 내에서 선언된 함수는 extern으로 간주됩니다.

3. 함수 외부에서 선언된 변수 및 함수는 외부 연결 을 통해 정적으로 간주됩니다 .

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

C 에는 4개의 스토리지 클래스가 있습니다. 살펴보겠습니다.

1. C의 자동 스토리지 클래스

함수나 블록에 정의된 모든 변수는 언급된 스토리지 클래스가 없는 경우 기본적으로 자동 스토리지 클래스에 속합니다. 자동 스토리지 클래스에 속하는 함수 또는 블록의 변수는 auto 지정자로 선언됩니다. C에서 auto 아래의 변수 는 정의된 블록에 로컬이며 블록 외부에서 삭제됩니다.

자동 스토리지 클래스를 보여주는 간단한 프로그램:

#include <stdio.h>

정수 메인( )

{

자동 정수 i = 11;

{

자동 정수 i = 22;

{

자동 정수 i = 33;

printf ("%d", i);

}

printf ("%d", i);

}

printf ( "%d", i);

}

프로그램의 출력:

3 2 1

설명:

위의 프로그램에서는 변수 i가 세 번 선언되었습니다. 같은 이름의 변수는 다른 블록에서 정의할 수 있습니다. 따라서 이 프로그램은 오류 없이 성공적으로 컴파일되고 실행됩니다. 가장 안쪽 블록에 있는 함수 'printf'는 3을 인쇄하고 이 블록의 변수 i는 블록이 끝난 후 소멸됩니다.

다음으로, 두 번째 외부 블록은 2를 인쇄하고 그 다음에는 1을 인쇄하는 외부 블록이 인쇄됩니다. 자동 변수가 제대로 초기화됩니다. 그렇지 않으면 컴파일러가 초기 값을 제공하지 않기 때문에 정의되지 않은 값을 얻게 됩니다.

2. C에 스토리지 클래스 등록

레지스터 저장 클래스에 속하는 변수 는 C의 auto 와 동일 하지만 메모리가 아닌 CPU 레지스터에 저장되므로 이름이 지정됩니다. 자주 접하는 것들입니다. 레지스터 지정자는 레지스터 스토리지 클래스의 변수를 선언하는 데 사용됩니다. 레지스터 스토리지 클래스의 변수는 블록이 끝날 때 정의되고 소멸되는 블록에 로컬입니다.

레지스터 스토리지 클래스를 보여주는 간단한 프로그램:

#include <stdio.h>

정수 메인()

{

등록 int i = 10;

정수 *p = &i; //오류: 요청된 레지스터 변수의 주소

printf ("i의 값: %d", *p);

printf ("i의 주소: %u", p);

}

설명:

위의 프로그램에서 코드는 변수 i의 주소를 포인터 변수 p로 가져오려고 시도하지만 i가 레지스터 변수로 선언되므로 코드가 컴파일되지 않고 "오류: 레지스터 변수의 주소가 요청되었습니다" 오류 가 표시됩니다. .

특정 유형의 변수만 레지스터에 배치됩니다. 레지스터 변수는 컴파일러에서 초기 값을 제공하지 않습니다.

배우기: C++ 대 Java: C++와 Java의 차이점

3. C의 정적 스토리지 클래스

정적 변수의 가시성은 함수 또는 파일 외부에서 0이지만 해당 값은 호출 간에 유지됩니다. 정적 저장소 클래스가 있는 변수는 정적 지정자로 선언됩니다. 정적 변수는 함수 또는 파일 내에 있습니다. 정적 지정자는 지역 및 전역 변수와 다르게 작동합니다.

로컬 및 전역 변수가 있는 정적 저장소 클래스를 보여주는 간단한 프로그램:

나. 지역 변수

#include <stdio.h>

무효 staticDemo()

{

정적 정수 i;

{

정적 정수 i = 1;

printf ("%d", i);

나는 ++;

}

printf ("%d", i);

나는 ++;

}

정수 메인()

{

정적 데모();

정적 데모();

}

프로그램의 출력:

1 0

2 1

설명:

지역 변수가 정적 지정자로 정의되면 함수 또는 블록 내부에 컴파일러에 영구적인 저장 공간이 생성됩니다. 정적 지역 변수는 지정된 위치의 함수 또는 블록에서 볼 수 있으며 함수 호출 사이에 값을 유지합니다. 위의 프로그램에서 정적 변수 i는 staticDemo() 함수 내부 두 블록의 두 위치에 정의되어 있습니다. staticDemo()는 메인 함수에서 두 번 호출됩니다. 다음 호출에서 정적 변수는 이전 값을 유지하므로 다시 초기화할 필요가 없습니다.

ii. 전역 변수

#include <stdio.h>

정적 int gInt = 1;

정적 무효 staticDemo()

{

정적 정수 i;

printf ("%d", i);

나는 ++;

printf ("%d", globalInt);

글로벌인트++;

}

정수 메인()

{

정적 데모();

정적 데모();

}

프로그램의 출력:

0 1

1 2

설명:

정적 변수는 프로그램에서 한 번만 초기화해야 하며 평생 동안 유지됩니다. 기본 초기 값은 0입니다.

전역 변수나 함수가 정적 지정자에 의해 정의되면 해당 변수나 함수는 그것이 정의된 파일에서만 알 수 있습니다. 전역 변수의 경우 정적 전역 변수에 내부 연결이 있으므로 다른 파일 루틴은 해당 내용에 액세스하고 해당 내용을 변경할 수 없습니다. 위의 프로그램에서 정적 전역 변수 globalInt와 정적 함수 staticDemo()는 static으로 정의되어 있으며 C 파일 외부에서 사용할 수 없습니다.

4. C의 외부 스토리지 클래스

외부 스토리지 클래스 변수 또는 함수는 'extern' 지정자로 선언됩니다. 변수가 extern 지정자로 선언되면 변수에 스토리지가 할당되지 않으며 프로그램의 다른 곳에서 이미 정의된 것으로 가정합니다. extern 지정자를 사용하면 변수가 초기화되지 않습니다. extern을 사용하여 프로그램에서 변수를 지정하여 외부 연결 로 선언하는 이유입니다 .

외부 스토리지 클래스를 보여주는 간단한 프로그램:

#include <stdio.h>

외부 정수 i;

정수 메인()

{

printf ("i: %d", i);

}

정수 i = 1;

설명:

위의 C 프로그램에서 extern int i 가 제거되면 변수 i 는 printf 에서 사용한 후 정의되었기 때문에 "Undeclared identifier 'i'' 오류가 발생합니다. extern 지정자는 변수 i가 정의되었고 여기에서 선언되었음을 컴파일러에 지시합니다.

extern int i를 변경하면; extern int i = 5로; extern 지정자가 변수를 초기화하지 않기 때문에 "'i' 재정의" 오류가 발생 합니다.

읽어보기: C 초보자를 위한 7가지 흥미로운 프로젝트 아이디어

마지막 단어

이 기사에서는 C의 스토리지 클래스 개념을 자세히 설명하고 해당 유형이 서로 어떻게 다른지 알려줍니다. 특정 스토리지 클래스를 사용하는 시기는 할당 및 처리 중인 변수의 범위, 수명 및 가시성에 따라 다릅니다.

더 자세히 알아보고 업계 전문가의 멘토링이 필요한 경우 upGrad & IIIT Banglore의 전체 스택 소프트웨어 개발 PG 디플로마를 확인하십시오.

미래의 직업을 위한 준비

전체 스택 소프트웨어 개발에서 업그레이드 및 IIIT-BANGALORE의 PG 디플로마
오늘 등록