Классы хранения в C: Auto, Extern, Static, Register (примеры)

Что такое класс памяти в C?

Класс хранения представляет видимость и расположение переменной. Он сообщает, из какой части кода мы можем получить доступ к переменной. Класс хранения в C используется для описания следующих вещей:

  • Область видимости переменной.
  • Место, где будет храниться переменная.
  • Инициализированное значение переменной.
  • Время жизни переменной.
  • Кто может получить доступ к переменной?

Таким образом, класс хранения используется для представления информации о переменной.

ПРИМЕЧАНИЕ: Переменная связана не только с тип данных, его значение, но также и класс хранения.

Каковы типы классов хранения в 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 не может быть инициализирована, она уже определена в исходном файле.

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 [File -> new -> Empty File, сохраните (как original.c) и добавьте его в текущий проект, нажав «ОК» в диалоговом окне.

Класс внешнего хранилища в 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

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

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.

Класс хранения Декларация Память Начальное значение по умолчанию Объем Вечного пользования
автоматический Внутри функции/блока Память Непредсказуемый Внутри функции/блока Внутри функции/блока
зарегистрироваться Внутри функции/блока Регистры процессора Мусор Внутри функции/блока Внутри функции/блока
внешний Вне всех функций Память                           0 Заполните файл и другие файлы целиком, в которых переменная объявлена ​​как extern. время выполнения программы
Статический (локальный) Внутри функции/блока Память                           0 Внутри функции/блока время выполнения программы
Статический (глобальный) Вне всех функций Память                           0 Глобальный время выполнения программы

Резюме

В этом уроке мы обсудили классы хранения в C, подведем итог:

  • Класс хранения в C используется для представления дополнительной информации о переменной.
  • Класс хранения представляет область действия и срок действия переменной.
  • Он также сообщает, кто и откуда может получить доступ к переменной?
  • Auto, extern, Register, static — это четыре разных класса памяти в программе на C.
  • Спецификатор класса хранения в Язык C используется для определения переменных, функций и параметров.
  • auto используется для локальной переменной, определенной внутри блока или функции.
  • Регистр используется для хранения переменной в регистрах ЦП, а не в памяти для быстрого доступа.
  • Статика используется как для глобальных, так и для локальных переменных. Каждый из них имеет свой вариант использования в программе на языке C.
  • Extern используется для обмена данными между файлами проекта C.