Вы должны использовать extern "C" в файле, который имеет только определения?
Бессмысленно иметь:
#ifdef __cplusplus
extern "C" {
#endif
// code...
#ifdef __cplusplus
}
#endif
Где "код..." - это просто набор определений и typedefs (без включений и т. Д.)?
2 ответа
В принципе, в вашем конкретном случае (без объявления переменных или функций) extern "C"
бессмысленно.
На практике это делает код более читабельным (показывая намерение определить дружественный C++ интерфейс) и менее хрупким. Некоторые разработчики (возможно, вы) могут (через несколько месяцев) добавить другие объявления внутри него.
Это зависит от того, как вы собираетесь использовать заголовок.
Если типы и значения допустимы и имеют одинаковое значение как в C, так и в C++, и вы намереваетесь использовать их из одних модулей компиляции, скомпилированных как C, а других скомпилированных как C++, то вам необходимо использовать extern "C"
при компиляции как C++. В противном случае ваш код C++ и код C не могут взаимодействовать.
Если заголовочный файл включен модулями компиляции, он будет построен только как C, как C++, но никогда как оба, тогда вам не нужно extern "C"
, И вы можете использовать функции, специфичные для выбранного вами языка.