Классы хранения в C: auto, extern, static, класс регистров в C

Содержание:

Anonim

Что такое класс хранения в C?

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

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

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

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

Всего существует четыре типа стандартных классов хранения. В таблице ниже представлены классы хранения в C.

Класс хранения Цель
авто Это класс хранения по умолчанию.
внешний Это глобальная переменная.
статический Это локальная переменная, которая способна возвращать значение, даже когда управление передается вызову функции.
регистр Это переменная, которая хранится в регистре.

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

  • Класс автоматического хранения в C
  • Класс внешнего хранилища в C
    • Первый файл: main.c
    • Второй файл: original.c
  • Класс статического хранения в C
  • Зарегистрируйте класс хранилища в C

Класс автоматического хранения в C

Переменные, определенные с помощью класса автоматического хранения, называются локальными переменными. Авто означает автоматический класс хранения. По умолчанию переменная относится к классу автоматического хранения, если она не указана явно.

Объем автоматической переменной ограничен только конкретным блоком. Как только управление выходит из блока, доступ прекращается. Это означает, что только блок, в котором объявлена ​​переменная auto, может получить к ней доступ.

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

Example, auto int age;

Программа ниже определяет функцию с двумя локальными переменными

int add(void) {int a=13;auto int b=48;return a+b;}

Возьмем другую программу, которая показывает "уровень видимости" уровня области видимости для автоматических переменных в каждом коде блока, которые не зависят друг от друга:

#include 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, называются глобальными переменными. Эти переменные доступны во всей программе. Обратите внимание, что внешняя переменная не может быть инициализирована, она уже была определена в исходном файле.

Example, extern void display();

Первый файл: main.c

#include extern i;main() {printf("value of the external integer is = %d\n", i);return 0;}

Второй файл: original.c

#include i=48;

Результат:

 value of the external integer is = 48

Чтобы скомпилировать и запустить приведенный выше код, выполните следующие действия.

Шаг 1) Создайте новый проект,

  1. Выберите консольное приложение
  2. Нажмите "Перейти"

Шаг 2) Выберите C и нажмите Далее.

Шаг 3) Нажмите Далее

Шаг 4) Введите данные и нажмите Далее.

Шаг 5) Нажмите Готово.

Шаг 6) Поместите основной код, как показано в предыдущей программе, в файл main.c и сохраните его.

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

Шаг 8) Поместите и сохраните C-код файла original.c, показанного в предыдущем примере, без функции main ().

Шаг 9) Создайте и запустите свой проект. Результат показан на следующем рисунке.

Класс статического хранения в C

Статические переменные используются в функции / файле как локальные статические переменные. Их также можно использовать как глобальную переменную.

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

Имейте в виду, что статическая переменная имеет начальное значение по умолчанию, равное нулю, и инициализируется только один раз за время своего существования.

#include  /* 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= 7iteration=15 and counter= 8iteration=16 and counter= 9

Глобальные переменные доступны во всем файле, тогда как статические переменные доступны только для определенной части кода.

Срок жизни статической переменной - во всем программном коде. Переменная, объявленная или инициализированная с использованием ключевого слова static, всегда содержит ноль в качестве значения по умолчанию.

Зарегистрируйте класс хранилища в C

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

Example: register int age;

Регистр ключевого слова используется для объявления класса хранения регистров. Переменные, объявленные с использованием класса хранения регистров, действуют на протяжении всей программы.

Он аналогичен классу автохранилища. Переменная ограничена конкретным блоком. Единственное отличие состоит в том, что переменные, объявленные с использованием класса хранения регистров, хранятся внутри регистров ЦП, а не в памяти. Регистр имеет более быстрый доступ, чем у основной памяти.

Переменные, объявленные с использованием класса хранения регистров, не имеют значения по умолчанию. Эти переменные часто объявляются в начале программы.

#include  /* 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.
  • Спецификатор класса хранения на языке C используется для определения переменных, функций и параметров.
  • auto используется для локальной переменной, определенной в блоке или функции
  • Регистр используется для хранения переменной в регистрах процессора, а не в ячейке памяти для быстрого доступа.
  • Статический используется как для глобальных, так и для локальных переменных. У каждого есть свой вариант использования в программе C.
  • Extern используется для обмена данными между файлами проекта C.