Требуется ли extern «C» только в объявлении функции?

Я написал C ++ функцию, которую мне нужно вызывать из C программы. Чтобы сделать его вызываемым из C, я указалextern "C" на функциидекларация, Затем я скомпилировал код C ++, но компилятор (Dignus Systems / C ++) сгенерировалискаженное имя для функции. Таким образом, это, видимо, не чтилоextern "C".

Чтобы решить эту проблему, я добавилextern "C" к функцииопределение, После этого компилятор сгенерировал имя функции, которое можно вызвать из C.

Технически,extern "C" нужно только указать в объявлении функции. Это правильно? (TheC ++ FAQ Lite имеет хороший пример этого.) Вы также должны указать это в определении функции?

Вот пример, чтобы продемонстрировать это:

/* ---------- */
/* "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, чтобы убедиться, что я знаю, какой с технической точки зрения «правильный» путь.

Ответы на вопрос(6)

Ваш ответ на вопрос