Курсы программирования в Киеве - Extern

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

Если переменная объявлена как extern, то компилятор знает, что ее определение будет находиться где-то в другом месте в коде, и не будет создавать новую переменную с таким же именем. То есть, мы можем объявить переменную в одном файле, а определить её в другом файле и использовать в обоих местах. Например:

file1.c:

c
extern int x;
int foo(void) {
  return x;
}

file2.c:

c
int x = 10;

main.c:

c
#include 
int foo();
int main(void) {
    printf("%d\n", foo()); // выведется 10
    return 0;
}

Здесь мы объявляем переменную x как extern в file1.c, чтобы компилятор знал, что определение переменной будет в другом месте. А в file2.c мы определяем саму переменную x и присваиваем ей значение 10. В main.c мы подключаем функцию foo и выводим её значение в stdout.

Как для переменных, так и для функций ключевое слово extern может быть неявным, то есть компилятор будет считать, что все функции и переменные не определены в данном файле являются extern. Например:

file1.c:

c
int x;
int foo(void) {
  return x;
}

file2.c:

c
extern int x;
int y;
int bar(int z) {
  return x + y + z;
}

main.c:

c
#include 
int foo();
int bar(int);
int main(void) {
    x = 10;
    int y = 20;
    printf("%d\n", foo()); // выведется 10
    printf("%d\n", bar(30)); // выведется 60
    return 0;
}

Здесь переменная x, объявленная в file1.c, считается неявно extern, а функция и переменная, объявленные в file2.c, явно объявляются как extern. В main.c мы присваиваем значение 10 переменной x, объявленной в file1.c, и объявляем новую переменную y со значением 20. В функции bar мы складываем значения x, y и z и возвращаем их. Выводим значения foo и bar в stdout.

Все переменные и функции, объявленные в другом файле как extern, должны иметь одинаковый тип и имя. Если тип или имя будет отличаться, компилятор может выдать ошибку.

Также стоит отметить, что в C++ ключевое слово extern может использоваться для объявления переменных и функций шаблонных классов, подключаемых из других файлов. В таком случае синтаксис будет выглядеть следующим образом:

c++
extern template class MyClass; // MyClass определен в другом файле

Похожие вопросы на: "extern "

AVX2: новые возможности для ускорения векторных операций
Java массив: как создать, заполнить и обработать массив в Java
Python HTTP server: the comprehensive guide
Обработка данных с помощью JavaScript
Listener - Лучший способ общаться с аудиторией
MyPy - статическая типизация в Python
Базы данных: что это такое и как с ними работать?
<h1>Script JS: создание интерактивных веб-сайтов стало проще
Как изменить цвет фона в HTML
Исправление ошибки "Command Not Found: Brew" при использовании Zsh