Класове за съхранение в C: Auto, Extern, Static, Register (Примери)

Какво е клас на съхранение в C?

Класът за съхранение представлява видимостта и местоположението на променлива. Той показва от коя част от кода можем да получим достъп до променлива. Клас за съхранение в C се използва за описание на следните неща:

  • Обхватът на променливата.
  • Мястото, където ще се съхранява променливата.
  • Инициализираната стойност на променлива.
  • Живот на променлива.
  • Кой има достъп до променлива?

По този начин класът за съхранение се използва за представяне на информация за променлива.

ЗАБЕЛЕЖКА: Променливата не е свързана само с a тип данни, неговата стойност, но и клас за съхранение.

Какви са типовете класове за съхранение в C?

Има общо четири вида стандартни класове за съхранение. Таблицата по-долу представя класовете за съхранение в 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, се наричат ​​глобални променливи. Тези променливи са достъпни в цялата програма. Забележете, че външната променлива не може да бъде инициализирана, тя вече е дефинирана в оригиналния файл.

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. Щракнете Напред

Външен клас за съхранение в C

Стъпка 2) Изберете C и щракнете върху Напред

Външен клас за съхранение в C

Стъпка 3) Кликнете върху Напред

Външен клас за съхранение в C

Стъпка 4) Въведете подробности и щракнете върху Напред

Външен клас за съхранение в C

Стъпка 5) Кликнете върху Завършване

Външен клас за съхранение в C

Стъпка 6) Поставете основния код, както е показано в предишната програма, във файла main.c и го запазете

Външен клас за съхранение в C

Стъпка 7) Създайте нов C файл [Файл -> нов -> Празен файл, запазете (като original.c) и го добавете към текущия проект, като щракнете върху „OK” в диалоговия прозорец.

Външен клас за съхранение в C

Стъпка 8) Поставете и запазете C кода на файла original.c, показан в предишния пример, без функцията main().

Външен клас за съхранение в C

Стъпка 9) Изградете и стартирайте своя проект. Резултатът е показан на следващата фигура

Външен клас за съхранение в C

Статичен клас за съхранение в C

Статичните променливи се използват във функция/файл като локални статични променливи. Могат да се използват и като глобална променлива

  • Статичната локална променлива е локална променлива, която запазва и съхранява стойността си между извиквания на функция или блок и остава видима само за функцията или блока, в които е дефинирана.
  • Статичните глобални променливи са глобални видими променливи само във файла, в който е деклариран.
Example: static int count = 10;

Имайте предвид, че статичната променлива има първоначална стойност по подразбиране нула и се инициализира само веднъж в живота си.

#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, винаги съдържа нула като стойност по подразбиране.

Регистрирайте клас за съхранение в C

Можете да използвате класа за съхранение на регистър, когато искате да съхранявате локални променливи във функции или блокове в регистрите на процесора, вместо RAM за да имате бърз достъп до тези променливи. Например „броячи“ са добър кандидат за съхраняване в регистъра.

Example: register int age;

Ключовата дума регистрирам се използва за деклариране на клас за съхранение на регистър. Променливите, декларирани с помощта на регистър клас за съхранение, имат продължителност на живота в цялата програма.

Подобен е на класа за автоматично съхранение. Променливата е ограничена до конкретния блок. Единствената разлика е, че променливите, декларирани чрез клас за съхранение на регистър, се съхраняват в регистрите на процесора вместо в памет. Регистърът има по-бърз достъп от този на основната памет.

Променливите, декларирани с помощта на регистър клас за съхранение, нямат стойност по подразбиране. Тези променливи често се декларират в началото на програмата.

#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 програмирането

Клас на съхранение Декларация Съхранение Първоначална стойност по подразбиране Обхват Човешки живот
автоматичен Вътре във функция/блок памет Непредвидим В рамките на функцията/блока В рамките на функцията/блока
регистрирам Вътре във функция/блок Регистри на процесора Боклук В рамките на функцията/блока В рамките на функцията/блока
външен Извън всички функции памет нула Целият файл и други файлове, където променливата е декларирана като extern време за изпълнение на програмата
Статични (локални) Вътре във функция/блок памет нула В рамките на функцията/блока време за изпълнение на програмата
Статични (глобални) Извън всички функции памет нула В световен мащаб време за изпълнение на програмата

Oбобщение

В този урок обсъдихме класовете за съхранение в C, за да обобщим:

  • Клас за съхранение в C се използва за представяне на допълнителна информация за променлива.
  • Класът на съхранение представлява обхвата и продължителността на живота на променлива.
  • Той също така казва кой има достъп до променлива и откъде?
  • Auto, extern, register, static са четирите различни класа за съхранение в C програма.
  • Спецификатор на клас съхранение в C език се използва за дефиниране на променливи, функции и параметри.
  • auto се използва за локална променлива, дефинирана в блок или функция
  • регистърът се използва за съхраняване на променливата в регистрите на процесора, а не място в паметта за бърз достъп.
  • Static се използва както за глобални, така и за локални променливи. Всеки от тях има своя случай на използване в C програма.
  • Extern се използва за споделяне на данни между C проектни файлове.