O extern “C” é requerido somente na declaração da função?

Eu escrevi uma função de C ++ que eu preciso chamar de um programa em C. Para torná-lo chamavel de C, eu especifiqueiextern "C" na funçãodeclaração. Eu então compilei o código C ++, mas o compilador (Dignus Systems / C ++) gerounome destroçado para a função. Então, aparentemente, não honrou oextern "C".

Para resolver isso, eu adicioneiextern "C" para a funçãodefinição. Depois disso, o compilador gerou um nome de função que pode ser chamado de C.

Tecnicamente, oextern "C" só precisa ser especificado na declaração da função. Isto está certo? (OC ++ FAQ Lite tem um bom exemplo disso.) Você também deve especificá-lo na definição da função?

Aqui está um exemplo para demonstrar isso:

/* ---------- */
/* "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...
}

Meu problema pode ser o resultado da codificação incorreta de algo ou talvez eu tenha encontrado um erro no compilador. De qualquer forma, eu queria consultar o stackoverflow para ter certeza de que é tecnicamente o caminho "certo".

questionAnswers(6)

yourAnswerToTheQuestion