Класс хранения C

В этом руководстве вы узнаете об области действия и времени жизни локальных и глобальных переменных. Также вы узнаете о статических и регистровых переменных.

Каждая переменная в программировании на C имеет два свойства: тип и класс хранения.

Тип относится к типу данных переменной. А класс хранения определяет область видимости и время жизни переменной.

Есть 4 типа класса хранения:

  1. автоматический
  2. внешний
  3. статический
  4. регистр

Локальная переменная

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

Возьмем пример.

 #include int main(void) ( for (int i = 0; i < 5; ++i) ( printf("C programming"); ) // Error: i is not declared at this point printf("%d", i); return 0; )

При запуске указанной выше программы вы получите сообщение об ошибке с необъявленным идентификатором i. Это потому, что я объявлен внутри forблока цикла. За пределами квартала это не декларировано.

Возьмем другой пример.

  int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() ) 

В приведенном выше примере n1 является локальным, main()а n2 - локальным func().

Это означает, что вы не можете получить доступ к переменной n1 внутри, func()поскольку она существует только внутри main(). Точно так же вы не можете получить доступ к переменной n2 внутри, main()поскольку она существует только внутри func().

Глобальная переменная

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

Пример 1: глобальная переменная

 #include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); ) 

Вывод

 п = 7

Предположим, глобальная переменная объявлена ​​в file1. Если вы попытаетесь использовать эту переменную в другом файле file2, компилятор пожалуется. Чтобы решить эту проблему, externиспользуется ключевое слово in, file2чтобы указать, что внешняя переменная объявлена ​​в другом файле.

Регистровая переменная

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

Однако современные компиляторы очень хороши в оптимизации кода, и есть редкая вероятность, что использование регистровых переменных сделает вашу программу быстрее.

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

Статическая переменная

Статическая переменная объявляется с помощью staticключевого слова. Например;

 статический int i;

Значение статической переменной сохраняется до конца программы.

Пример 2: статическая переменная

 #include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); ) 

Вывод

 6 11

Во время первого вызова функции значение c инициализируется равным 1. Его значение увеличивается на 5. Теперь значение c равно 6, которое выводится на экран.

Во время второго вызова функции c не инициализируется снова в 1. Это потому, что c - статическая переменная. Значение c увеличивается на 5. Теперь его значение будет равно 11, и оно будет напечатано на экране.

Интересные статьи...