Re: C++, Qt et bouquins

Top Page

Reply to this message
Author: Bruno Zoppis
Date:  
To: guilde
Subject: Re: C++, Qt et bouquins
> 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