Вы должны использовать 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", И вы можете использовать функции, специфичные для выбранного вами языка.

Другие вопросы по тегам