Re: C++ depuis c

Startseite

Nachricht beantworten
Autor: Francois-Xavier 'FiX' KOWALSKI
Datum:  
To: Liste Guilde
Betreff: Re: C++ depuis c
Autre possibilite (plus portable): declarer un prototype de fonction
trampoline (cad intermediaire) dans une clause:

extern "C" {
int my_sqare();
}

Cette clause instruit le compilateur de generer un symbole de type C
(sans "mangling" C++) qui est directement appelable depuis le C. Il faut
que le .h contenant cette declaration soit #inclu non seulement par
l'utilisateur de ce symbole (en C donc) mais aussi depuis le source qui
fourni ce symbole (le C++).

Pour info, cette clause est operationelle pour tous les languages qui
clament un niveau de compatibilite avec le C. Cela inclue donc C++, mais
aussi Objective-C & probablement d'autres.

A+

--FiX

Edgar Bonet wrote:
> J'ai écrit tout à l'heure en C :
>
>> int _Z6squarei(int i);
>>
>
> Plus élégant : tu peux appeler la fonction C++ par son nom C++, si tu
> demandes à l'éditeur de liens de créer un symbole avec ce nom là,
> synonyme du symbole créé par le compilateur C++. C'est l'option
> « --defsym nouveau_nom=ancien_nom » de ld. En l'occurrence ça devient :
>
> ===== b.c =====
> #include <stdio.h>
>
> int square(int i);
>
> int main(void)
> {
>     printf("%d^2 = %d\n", 5, square(5));
>     return 0;
> }
> ===============

>
> ===== test =====
> $ g++ -c -Wall -Wextra a.cc -o a.o
> $ gcc -c -Wall -Wextra b.c -o b.o
> $ gcc -Wl,--defsym,square=_Z6squarei a.o b.o
> $ ./a.out
> 5^2 = 25
> ================
>
> À+,
>
>