Основы программирования на языке Си. Кучин Н.В - 57 стр.

UptoLike

Составители: 

57
ти, в которой находилась эта переменная, считается свободной и может
использоваться для других целей.
Автоматические переменные хранятся в оперативной памяти, точ-
нее в той области памяти, которая отводится под стек. Регистровые
(registr) переменные хранятся в регистрах процессора, доступ к кото-
рым значительно быстрее, чем к автоматическим переменным. В ос-
тальном регистровые переменные аналогичны автоматическим перемен-
ным. Регистровая память процессора невелика, и если доступных реги-
стров нет, то переменная становится простой автоматической перемен-
ной. Описание регистровой переменной имеет вид: registr int q;
Внешняя переменная (extern) относится к глобальным переменным.
Она может быть объявлена как вне , так и внутри тела функции:
void ff(void)
{
……………
extern int x; /* объявление переменной внутри функции*/
……………
}
Появление ключевого слова extern связано с модульностью языка С,
т. е. возможностью составлять многофайловую программу, где каждый
файл компилируется отдельно. Когда мы в одном из файлов опишем
вне тела функции глобальную переменную, например так – float global; , то
для нее выделится место в памяти в разделе глобальных переменных и
констант. Если мы используем эту глобальную переменную в другом
файле, то при раздельной компиляции компилятор не будет знать, что
это за переменная. Использование объявления extern float global; не при-
водит к выделению памяти, а сообщает компилятору, что такая пере-
менная будет описана в другом файле. И тогда при компоновке про-
граммы, состоящей из нескольких файлов, компоновщик будет искать
описание этой переменной и связывать ее с использованием в других
файлах. Объявление внешней переменной может быть как вне функ-
ции, так и внутри функции. Если это же имя без ключевого слова extern
будет объявлено внутри функции, то под этим именем будет создана
уже другая автоматическая переменная. Можно к объявлению этой пе-
ременной добавить ключевое слово auto, чтобы показать, что вы не
ошиблись, а намеренно продублировали имя. Объявлений переменной
как внешней может быть несколько, в том числе и в одной функции