0Pricing
C Academy · Урок

extern и глобальные переменные

Общий доступ между файлами

«extern и глобальные переменные» — бесплатный урок C Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C Academy содержит 4 уроков всего.

Глобальные переменные

Переменная, объявленная вне любой функции, имеет область видимости файла и существует всю программу. Это глобальная переменная.

#include <stdio.h>
int counter = 0;
void bump(void) {
    counter++;
}
int main(void) {
    bump();
    bump();
    printf("counter = %d\n", counter);
    return 0;
}

Глобальные переменные являются общими

Любая функция в файле может читать и изменять глобальную переменную. Это удобно, но такие переменные легко использовать неправильно.

#include <stdio.h>
int score = 100;
void penalty(void) { score -= 25; }
void bonus(void) { score += 10; }
int main(void) {
    penalty();
    bonus();
    printf("score = %d\n", score);
    return 0;
}

Инициализация нулём по умолчанию

Глобальные переменные без инициализатора автоматически получают значение 0.

#include <stdio.h>
int total;
int main(void) {
    printf("total = %d\n", total);
    return 0;
}

Ключевое слово extern

extern объявляет глобальную переменную, которая определена в другом месте. Оно сообщает компилятору о существовании переменной, не выделяя для неё память.

#include <stdio.h>
int shared = 5;
extern int shared;
int main(void) {
    printf("shared = %d\n", shared);
    return 0;
}

Объявление и определение

Определение выделяет память. Объявление только сообщает имя чего-либо. Объявления extern память не выделяют.

#include <stdio.h>
int value = 42;
int main(void) {
    extern int value;
    printf("value = %d\n", value);
    return 0;
}

Общий доступ из разных файлов

В проектах из нескольких файлов один файл .c определяет глобальную переменную, а другие файлы используют extern в заголовочном файле, чтобы получить к ней доступ.

#include <stdio.h>
extern int globalCount;
int globalCount = 3;
int main(void) {
    printf("globalCount = %d\n", globalCount);
    return 0;
}

Функции тоже могут быть extern

Функции по умолчанию имеют внешнее связывание, поэтому прототип фактически является объявлением этой функции с extern.

#include <stdio.h>
extern void hello(void);
void hello(void) {
    printf("Hello from extern\n");
}
int main(void) {
    hello();
    return 0;
}

Время жизни глобальных переменных

Глобальные переменные существуют от запуска до завершения программы, поэтому их значения сохраняются между всеми вызовами функций.

#include <stdio.h>
int visits = 0;
void page(void) { visits++; }
int main(void) {
    page();
    page();
    page();
    printf("visits = %d\n", visits);
    return 0;
}

Риски глобальных переменных

Поскольку любой код может изменить глобальную переменную, ошибки становится трудно отслеживать. По возможности предпочитайте передавать значения в качестве параметров.

#include <stdio.h>
int config = 1;
int compute(int input) {
    return input * config;
}
int main(void) {
    printf("%d\n", compute(8));
    return 0;
}

Глобальные переменные только для чтения

Сочетайте const с глобальной переменной, чтобы создать общую константу, которую никто не сможет изменить.

#include <stdio.h>
const int MAX_USERS = 50;
int main(void) {
    printf("MAX_USERS = %d\n", MAX_USERS);
    return 0;
}

Практический шаблон

Глобальное значение конфигурации, которое читают несколько функций, — распространённый и допустимый вариант использования.

#include <stdio.h>
int multiplier = 3;
int scale(int x) { return x * multiplier; }
int main(void) {
    printf("%d\n", scale(4));
    printf("%d\n", scale(7));
    return 0;
}

Быстрая проверка

Проверьте своё понимание extern и глобальных переменных.

Итоги: extern и глобальные переменные

Вы узнали о глобальных переменных и внешнем связывании.

  • Глобальные переменные имеют область видимости файла и существуют всю программу
  • По умолчанию они получают значение 0 и доступны всем функциям
  • extern объявляет глобальную переменную, определённую в другом месте
  • Определение выделяет память, а объявление только сообщает имя
  • Используйте глобальные переменные умеренно, чтобы избежать скрытой связанности

Часто задаваемые вопросы

Урок «extern и глобальные переменные» бесплатный?

Да — полный текст урока «extern и глобальные переменные» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C Academy, подпишись на CoddyKit PRO. Курс C Academy содержит 4 уроков всего.

Чему я научусь в уроке «extern и глобальные переменные»?

Общий доступ между файлами Ты практикуешь C Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C Academy?

Предыдущий опыт не требуется. C Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «extern и глобальные переменные»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C Academy?

Да. Каждый урок C Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. auto и локальная область видимости
  2. static-переменные
  3. extern и глобальные переменные
  4. register и const
← Назад к C Academy