Самая большая проблема - это вызов функции C из кода C ++ или наоборот. В этом случае вы должны убедиться, что отметили функцию как «C», используя extern "C"
. Вы можете сделать это в заголовочном файле напрямую, используя:
#if defined( __cplusplus )
extern "C" {
#endif
extern int myfunc( const char *param, int another_one );
#if defined( __cplusplus )
}
#endif
Вам нужны #if
s, потому что код C, который включает его, не поймет extern "C"
.
Если вы не хотите (или не можете) изменить заголовочный файл, вы можете сделать это в коде C ++:
extern "C" {
#include "myfuncheader.h"
}
Вы можете пометить функцию C ++ как имеющую связь с C таким же образом, а затем вызвать ее из кода C. Вы не можете сделать это для перегруженных функций или классов C ++.
Кроме этого, не должно быть проблем при смешивании C и C ++. У нас есть несколько десятилетних функций C, которые все еще используются нашим кодом C ++.