По способу хранения переменных в памяти они делятся на классы:
1. Автоматические – переменные, для которых память выделяется по мере необходимости. Они присутствуют лишь в том блоке, где объявлены.
2. Регистровые – переменные хранятся во внутренних регистрах микропроцессора (сверхоперативная память), используются только внутри блока.
3. Статические – переменные, для которых память выделяется один раз и они существуют на протяжении всей программы.
4. Внешние – переменные, к которым требуется доступ, но они объявлены как статические в других функциях (возможно в другом модуле) или как глобальные (в другом модуле программы).
Модули можно компилировать по отдельности: упрощается написание и отладка программы (прочитать текст модулей после компиляции нельзя).
Auto – для автоматических переменных.
Regicter – для регистровых переменных.
Static – для статических переменных.
Extern – для внешних переменных.
Формат: класс тип имя.
По умолчанию локальные переменные – с классом auto, глобальные переменные – static, если указан класс переменной, но не указан тип, то по умолчанию int.
Размещение переменных в регистрах позволяет получить максимальную скорость программы, но при этом нарушается работа компиляторов.
Пример:
Static int a;
Double z;
Static b;
Auto int c; //ошибка
Func ( )
{
int d;
auto char e;
static double i;
}
Файл first.c
Файл second.c
Int a;
Void F1 (void)
{
Static int b;
...
}
Void F2 (void)
{
Extern int b;
...
}
Extern int b;
Int c;
Void F3 (void)
{
Extern int a
...
}
Void F4 (void)
{
...
}