Язык c ++ является аллергией c на добавление новых ключевых слов, поэтому некоторые из них используются для обозначения разных вещей. extern
является одним из этих повторно используемых ключевых слов. Имеет 3 возможных значения :
- внешняя связь - переменная или функция определяется где-то еще
- языковая связь - переменная или функция определяется как " external "language
- явное объявление создания шаблона
В вашем случае вы используете 1 и 2. extern "C"
объявляет, что код имеет "C"
вместо значения по умолчанию "C++"
связь. Это также подразумевает внешнюю связь, поэтому в чистом коде C ++ вы можете просто написать:
extern "C" {
double reciprocal (int i);
}
и reciprocal
будут автоматически помечены extern
. Добавление дополнительной extern
не имеет никакого эффекта и требуется для версии C, в которой нет оболочки extern "C"
.
Обратите внимание, что если вы используете версию extern "C"
с одним объявлением, тогда используйте второй extern
недействителен:
extern "C" extern double reciprocal (int i);
Поскольку второй extern
не требуется, правильное объявление:
extern "C" double reciprocal (int i);