Вызов функции C ++ из программы C - PullRequest
0 голосов
/ 28 ноября 2018

Я работаю над добавлением функции, написанной на C ++, в большую программу, написанную на C.

Я пытался окружить все коды, включенные в программу C, во внешние блоки "C", но когдаЯ компилирую с g ++, я все еще получаю ошибки, исходящие от компилятора, пытающегося скомпилировать C как C ++.Я добавил блоки extern "C" ко всем заголовкам и файлам .c следующим образом:

#ifdef __cplusplus
extern "C"
{
#endif

//C code here

#ifdef __cplusplus
}
#endif

Ошибки выглядят так:

. / Sortcodes / oci.c: В функции 'int GetSpecList (ClientData, Tcl_Interp *, int, Tcl_Obj * const *)': ./sortcodes/oci.c:188:25: ошибка: init не называет тип статическим init = TRUE;

Эти ошибки не возникают, если я удаляю свой вызов функции C ++ и просто компилирую программу C с помощью gcc.

Если удалить внешние блоки "C" и скомпилировать с использованием параметров

gcc -std = c ++ 0x -lstdc ++ -std = c ++ 11

Я получаю ошибки, подобные приведенной ниже, где флаги C ++ явно игнорировались

. / Event_Reader.cpp: 9: 20: фатальная ошибка: iostream: такого файла или каталога нет #include

Есть ли какие-либо варианты, которые я пропускаю или неправильно истолковываю?Любой совет будет оценен.

1 Ответ

0 голосов
/ 28 ноября 2018

Во-первых, для компиляции кода на С ++ вы должны использовать компилятор с ++, такой как g ++ или clang ++.Затем вам нужно объявить желаемую функцию c ++ со связью extern "C".На данный момент вы можете вызвать функцию из кода C.Обратитесь к Как вызвать функцию C ++ из C для конкретного примера.

...