Я написал функцию C ++, которую мне нужно вызвать из программы C. Чтобы сделать его вызываемым из C, я указал extern "C"
в объявлении функции . Затем я скомпилировал код C ++, но компилятор (Dignus Systems / C ++) сгенерировал искаженное имя для функции. Таким образом, очевидно, что extern "C"
не соблюдается.
Чтобы решить эту проблему, я добавил extern "C"
в определение функции . После этого компилятор сгенерировал имя функции, которую можно вызвать из C.
Технически extern "C"
нужно указывать только в объявлении функции. Это правильно? (Хороший пример приведен в C ++ FAQ об этом.) Следует ли также указать это в определении функции?
Вот пример, чтобы продемонстрировать это:
/* ---------- */
/* "foo.h" */
/* ---------- */
#ifdef __cplusplus
extern "C" {
#endif
/* Function declaration */
void foo(int);
#ifdef __cplusplus
}
#endif
/* ---------- */
/* "foo.cpp" */
/* ---------- */
#include "foo.h"
/* Function definition */
extern "C" // <---- Is this needed?
void foo(int i) {
// do something...
}
Моя проблема может быть результатом неправильного кодирования чего-либо или может быть обнаружена ошибка компилятора. В любом случае, я хотел проконсультироваться с stackoverflow, чтобы убедиться, что я знаю, какой технически "правильный" путь.