rhaport
@rhaport

Как правильно использовать extern «C»?

В проекте используются объекты C и C++. Чтоб компоновка работала необходимо инкапсулировать объявления С функций в extern "C" {...}.

Обычно я это делаю в хедере С модуля

// my_c_header.h
#ifdef __cplusplus
extern "C" {
#endif

void spam(void);

#ifdef __cplusplus
}
#endif


и спокойно включаю С хедер в С++ файл.

Однако в проекте встречаю конструкции типа
// my_cpp_header.hpp

extern "C" {
#include "my_c_header.h"
}
...

При этом в самом my_c_header.h ничего дополнительного не прописано.

По мне это выглядит небезопасно, так как my_c_header.h может быть включен где-то ранее без extern "C" вокруг, тогда включение выше будет неэффективным. Ну и вообще повсеместное использование extern "C" {} вокруг #include выглядит тяжеловесно.

Что вы думаете по этому поводу? Как вы мешаете C и C++ в своих проектах?
  • Вопрос задан
  • 3621 просмотр
Пригласить эксперта
Ответы на вопрос 1
Сколько человек пишет код?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы