# Глоссарий - `Automatic variables` - локальные перменные функции, которые создаются только во время, когда вызвана функция, и исчезают, когда функция остановлена (exited); - `Scope of a name` - часть программы, в рамках которой имя может быть использовано; *** # Глава 4.3 - Внешние переменные | 2026-02-09 22:56 | Какая-то атомная дрочь с калькулятором и витиеватым описанием примера с `getch` и `ungetch`. Пока пример опустил, суть то ясна о том, как работают области видимости # Глава 4.4 - Области видимости `Scope of external variable/function` - длится от точки, где он объявлен и до конца файла, который будет скомпилирован. Например: ```c main() { ... } int sp = 0; double val[MAXVAL]; void push(double f) { ... } double pop(void) { ... } ``` Тут: - `sp`, `val` могут быть использованы в `push` и `pop` - `sp`, `val`, `push`, `pop` не видимы для функции `main` ## extern Если на внешнюю переменную нужно сослаться до ее определения, или же она определена в другом исходном файле, который отличается от того, где ее пытаются вызвать - необходимо использовать слово `extern`. Важно различать *decalaration* и *definintion* внешней переменной. - decalaration: объявляет пропертисы переменной (тип); - definintion: так-же выделяет память под нее. *Например* ```c int sp; double val[MAXVAL]; ``` Если они объявлены вне функций, то они определяют (**define**) внешние переменные, выделяя под них память и также выступая декларацией для остального исходного файла ```c extern int sp; extern double val[]; ``` Декларируют (**declare**) что `sp` это `int`, а `val` - массив `double` (размер которого определен в другом месте), но они не создают эти переменные и не резервируют память под них.