В проекте используются объекты 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++ в своих проектах?