Если вы используете extern & quot; C & quot; в файле, который имеет только определения?

Бессмысленно иметь:

#ifdef __cplusplus
extern "C" {
#endif

// code...

#ifdef __cplusplus
}
#endif

Где «код …» — это просто набор определений и typedefs (без включений и т. Д.)?

0

Решение

В принципе, в вашем конкретном случае (без объявления переменных или функций) extern "C" бессмысленно.

На практике это делает код более читабельным (показывая намерение определить дружественный C ++ интерфейс) и менее хрупким. Некоторые разработчики (возможно, вы) могут (через несколько месяцев) добавить другие объявления внутри него.

2

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

Это зависит от того, как вы собираетесь использовать заголовок.

Если типы и значения допустимы и имеют одинаковое значение как в C, так и в C ++, и вы намереваетесь использовать их из одних модулей компиляции, скомпилированных как C, а других скомпилированных как C ++, то вам необходимо использовать extern "C" при компиляции как C ++. В противном случае ваш код C ++ и код C не могут взаимодействовать.

Если заголовочный файл включен модулями компиляции, он будет построен только как C, как C ++, но никогда как оба, тогда вам не нужно extern "C", И вы можете использовать функции, специфичные для выбранного вами языка.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector