I wrote a C++ function that I need to call from a C program.  To make it callable from C, I specified extern "C" on the function declaration.  I then compiled the C++ code, but the compiler (Dignus Systems/C++) generated a mangled name for the function.  So, it apparently did not honor the extern "C".  
To resolve this, I added extern "C" to the function definition.  After this, the compiler generated a function name that is callable from C.
Technically, the extern "C" only needs to be specified on the function declaration.  Is this right?  (The C++ FAQ has a good example of this.)  Should you also specify it on the function definition?  
Here's an example to demonstrate this:
/* ---------- */
/* "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...
}
My issue may be the result of incorrectly coding something, or I may have found a compiler bug. In any case, I wanted to consult stackoverflow to make sure I know which is technically the "right" way.
 
     
     
     
     
     
     
    