Ist die extern "C" ausschließlich an der Deklaration der Funktion?

Schrieb ich eine C++ - Funktion, die ich aufrufen müssen, die von einem C-Programm. Um es callable von C, die ich angegeben extern "C" auf die Funktion Erklärung. Ich habe dann kompiliert der C++ - code, aber der compiler (Dignus Systeme/C++) erzeugt eine entstellte Namen für die Funktion. So, es hat offensichtlich nicht die Ehre extern "C".

Diese zu lösen, fügte ich extern "C" um die Funktion definition. Nach diesem, den vom compiler generierten Funktion name, callable von C.

Technisch ist die extern "C" muss nur angegeben werden, auf die Deklaration der Funktion. Ist das richtig? (Die C++ FAQ Lite ist ein gutes Beispiel dafür.) Sollten Sie auch angeben, es auf die definition der Funktion?

Hier ist ein Beispiel um dies zu veranschaulichen:

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

Meine Frage kann das Ergebnis falsch-Codierung etwas, oder ich fand einen compiler-Fehler. In jedem Fall, ich wollte zu konsultieren, stackoverflow, um sicherzustellen, dass ich weiß, was technisch ist der "richtige" Weg.

InformationsquelleAutor der Frage bporter | 2009-09-04

Schreibe einen Kommentar