extern

Директива extern подключает внешний ресурс (переменную, структуру и т.д. ) , определенный и скомпилированный в другом файле. То есть extern работает уже на этапе сборки (компоновки).

Интересный полезный пример использования extern для объявления глобальных переменных ( к примеру строковых).

Можно использовать #define str "blablabla", но как оказывается define наплодит столько раз в памяти "blabla" сколько раз будет появляться в коде str.

Так вот при использовании extern "blablabla" будет один раз размещена в памяти (а ссылаться на нее можно многократно) и делается это так:

H файл:

extern char * str

c файл:

char * str = "blablabla"

extern "C"

extern "C" используется для указания , что функция в собираемой библиотеке будет не cpp типа , а типа С.

Это актуально, когда в проекте на с++ добавляются сторонние "старые" библиотеки , например openssl .