Le mercredi 22 décembre, à 21h55 (+0100), Francois-Xavier KOWALSKI a écrit :
> "toto.c":
>
> #include <stdio.h>
>
> int bidon (int i, char *s)
> {
> printf("bidon %i %s\n", i, s);
> return i;
> }
>
> [...]
>
> [fxk@valentine fxk]> g++ -c toto.c
> [fxk@valentine fxk]> nm toto.o
> 00000000 ? __FRAME_BEGIN__
> 00000000 T bidon__FiPc
> 00000000 t gcc2_compiled.
> U printf
>
> Le symbole bidon() est alors flanqué d'ordures...
Je viens de vérifier que c'est apparemment la seule incompatibilité
entre les objets C et C++ :
% cat main.c
#define bidon bidon__FiPc
int bidon(int i, char *s);
int main(void)
{
bidon(10, "dix");
return 0;
}
% gcc main.c toto.o -o toto
% ./toto
bidon 10 dix
Oui, je sais, le coup du #define n'est pas très beau, mais je ne connais
pas de solution simple si on ne veut pas modifier l'objet C++. J'avais
ainsi eu une fois l'occasion de jouer aux #define pour pouvoir faire
collaborer des compilos C et Fortran. L'un d'entre eux ayant l'habitude
d'ajouter des soulignés (_) aux noms des symboles.
--
Edgar Bonet Tel : +1 607 255-9349
LASSP -- Cornell University Fax : +1 607 255-6428
Clark Hall e-mail : edgar@???
Ithaca, NY 14853, USA http://bonet.polycnrs-gre.fr/~edgar/