> Un source C peut etre compile par un compilateur C++. OK...
> Cependant, les instructions du type :
> extern "C" {
> int ma_fonction(int param);
> }
> sont necessaire dans les sources C++ pour les fonctions
> contenues dans des modules (.o) compiles par un comilateur C
> (sinon il y a des pb de "linkage" de ces fonctions C...
> je ne sais pas pourquoi...)
Ca vient de la surcharge des fonctions. En C++, tu peux avoir
deux fonctions de nom "ma_fonction" ayant des signatures différentes :
int ma_fonction(int param);
int ma_fonction(int param1, Complex *param2);
Le compilateur doit affecter des symboles différents à ces deux
fonctions :
_ma_fonction__Fi
_ma_fonction__FiP7Complex
Pour importer une fonction C dans un programme C++, ou pour exporter une
fonction C++ vers un programme C, il faut declarer au compilateur que
le symbole doit etre genéré 'à la C'. Ainsi l'éditeur de lien peut s'y
retrouver.
Le symbole associé à la déclaration suivante est _autre_fonction en non
pas
_autre_fonction__Fi :
extern "C" int autre_fonction(int param);
NB: Une fonction C++ déclarée en extern "C" ne peut pas etre surchargée.
Bruno