extern «C», для чего это нужно?

Возможный дубликат:
Сочетание C ++ и C — как работает #ifdef __cplusplus?

Я сталкиваюсь со следующими строками во многих библиотеках; для чего они хороши? Когда / где __cplusplus определены?

#ifdef __cplusplus
extern "C" {
#endif

//...

#ifdef __cplusplus
}
#endif

0

Решение

__cplusplus определяется для кода C ++. Иногда случается, что вам приходится смешивать код C и код C ++. Для этого может быть много причин, например, у вас давно написан драйвер на C, который вы хотите использовать в своем новом проекте C ++ 0x.

У каждого типа функции и имени есть языковая связь. Существует различие между функциями C и AD C ++, поскольку в C нет перегрузки имен функций, имя функции может служить уникальным идентификатором в C, но не может использоваться в C ++. Это называется калечащие функции.

Поскольку вам не нужно искажать имя в C, используя extern "C" заставит компилятор пропустить добавление информации о параметрах для связывания.

Стандарт C ++ прямо заявляет в 7.5 параграфе 3:

Каждая реализация должна предусматривать связь с функциями, написанными на
язык программирования C, «C», и связь с функциями C ++, «C ++».

complex sqrt(complex); //C++ linkage by default
extern "C" {
double sqrt(double);//C linkage
}
4

Другие решения

Других решений пока нет …