c_programming_language/exercices/functions/README.md
2026-02-09 23:19:28 +03:00

40 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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