Класи зберігання в C: Auto, Extern, Static, Register (приклади)

Що таке клас зберігання в C?

Клас зберігання представляє видимість і розташування змінної. Він повідомляє, з якої частини коду ми можемо отримати доступ до змінної. Клас зберігання в C використовується для опису таких речей:

  • Область змінної.
  • Місце, де буде зберігатися змінна.
  • Ініціалізоване значення змінної.
  • Тривалість життя змінної.
  • Хто може отримати доступ до змінної?

Таким чином, клас зберігання використовується для представлення інформації про змінну.

ПРИМІТКА: Змінна пов’язана не лише з a тип даних, його значення, а також клас зберігання.

Які є типи класів зберігання в C?

Всього існує чотири типи стандартних класів зберігання. У таблиці нижче представлено класи зберігання в C.

Клас зберігання Мета
автоматичний Це клас зберігання за замовчуванням.
зовнішній Це глобальна змінна.
статичний Це локальна змінна, яка здатна повертати значення, навіть якщо керування передано виклику функції.
реєструвати Це змінна, яка зберігається всередині реєстру.

Автоматичний клас зберігання в C

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

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. Натисніть Go

Зовнішній клас зберігання в C

Крок 2) Виберіть C і натисніть «Далі».

Зовнішній клас зберігання в C

Крок 3) Натисніть Далі

Зовнішній клас зберігання в C

Крок 4) Введіть деталі та натисніть Далі

Зовнішній клас зберігання в C

Крок 5) Натисніть "Готово"

Зовнішній клас зберігання в C

Крок 6) Помістіть основний код, як показано в попередній програмі, у файл main.c і збережіть його

Зовнішній клас зберігання в C

Крок 7) Створіть новий файл C [Файл -> новий -> Порожній файл, збережіть (як original.c) і додайте його до поточного проекту, натиснувши «ОК» у діалоговому вікні.

Зовнішній клас зберігання в C

Крок 8) Вставте та збережіть код C файлу original.c, показаного в попередньому прикладі, без функції main().

Зовнішній клас зберігання в C

Крок 9) Створіть і запустіть свій проект. Результат показано на наступному малюнку

Зовнішній клас зберігання в C

Статичний клас зберігання в C

Статичні змінні використовуються у функції/файлі як локальні статичні змінні. Їх також можна використовувати як a глобальна змінна

  • Статична локальна змінна — це локальна змінна, яка зберігає та зберігає своє значення між викликами функції чи блоком і залишається видимою лише для функції чи блоку, у якому вона визначена.
  • Статичні глобальні змінні є видимими глобальними змінними лише до файлу, у якому він оголошений.
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

Ви можете використовувати клас зберігання реєстрів, якщо хочете зберігати локальні змінні у функціях або блоках у регістрах ЦП замість Оперативна пам'ять мати швидкий доступ до цих змінних. Наприклад, «лічильники» є хорошим кандидатом для зберігання в реєстрі.

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 час виконання програми
Статичний (локальний) Всередині функції/блоку пам'ять Нульовий У межах функції/блоку час виконання програми
Статичний (глобальний) Поза всіма функціями пам'ять Нульовий Глобальний час виконання програми

Підсумки

У цьому посібнику ми обговорювали класи зберігання в C, підсумовуючи:

  • Клас зберігання в C використовується для представлення додаткової інформації про змінну.
  • Клас зберігання представляє область і тривалість життя змінної.
  • Він також повідомляє, хто може отримати доступ до змінної і звідки?
  • Auto, extern, register, static — це чотири різні класи зберігання в програмі C.
  • Специфікатор класу зберігання в Мова С використовується для визначення змінних, функцій і параметрів.
  • auto використовується для локальної змінної, визначеної в блоці або функції
  • register використовується для зберігання змінної в регістрах процесора, а не для швидкого доступу до пам’яті.
  • Static використовується як для глобальних, так і для локальних змінних. Кожен з них має свій варіант використання в програмі на Сі.
  • Extern використовується для обміну даними між файлами проекту C.

Щоденний інформаційний бюлетень Guru99

Розпочніть свій день з останніх та найважливіших новин про штучний інтелект, які ви можете знайти просто зараз.