40 lines
2.6 KiB
Markdown
40 lines
2.6 KiB
Markdown
# Глоссарий
|
||
- `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` (размер которого определен в другом месте), но они не создают эти переменные и не резервируют память под них.
|
||
|