On peut réaliser des appels de fonction généré par un compilateur c++ depuis un compilateur C. C'est un peu moche, mais si çà marche :
exemple :
-- toto.c -- : (compilé avec un compilateur c++)
#include <toto.hh> // du c++ qui ne peut pas passer avec un compilo C
extern "C" {
#include <toto.h> // du C
}
t_toto * new_toto(void){
return (t_toto *) new toto(); // c'est du c++
}
Pour l'utilisation :
-- test.c --
include "toto.h"
void test(void){
t_toto * titi ;
titi = toto() ;
}
C'est moche car on fait croire au compilateur C que la fonction toto() a été compilée avec un compilateur C. Alors que ce n'est pas le cas. En c++, il y a la surchage, "int toto(int)" est différent de "int toto(long)" et peuvent cohabiter. L'édition de lien C va moins loin et ne peut distinguer "int toto(int)" et "int toto(long)". les deux fonctions ne peuvent cohabiter.
Mais çà marche.
Sinon en regardant le binding, c'est pas très existant. Entre autre les 1, 2, 3 ajoutés à la fin des noms de fonction car la surcharge n'est pas permise, les types qui sont totalement opaque, voir ici par exemple (çà doit être un enfer pour le debuggage) : http://webcvs.kde.org/cgi-bin/cvsweb.cgi/~checkout~/kdebindings/qtc(...)
Pour un développeur C, il est plus intéressant d'apprendre le C++ que d'utiliser çà.
[^] # Re: Des nouvelles du desktop
Posté par web123 . En réponse à la dépêche Des nouvelles du desktop. Évalué à 3.
J'ai regardé le binding qt :
http://webcvs.kde.org/cgi-bin/cvsweb.cgi/kdebindings/(...)
On peut réaliser des appels de fonction généré par un compilateur c++ depuis un compilateur C. C'est un peu moche, mais si çà marche :
exemple :
-- toto.c -- : (compilé avec un compilateur c++)
#include <toto.hh> // du c++ qui ne peut pas passer avec un compilo C
extern "C" {
#include <toto.h> // du C
}
t_toto * new_toto(void){
return (t_toto *) new toto(); // c'est du c++
}
-- toto.hh --
class toto{
public:
toto() ;
};
-- toto.h --
typedef struct { int dummy; } t_toto; # Argh...
Pour l'utilisation :
-- test.c --
include "toto.h"
void test(void){
t_toto * titi ;
titi = toto() ;
}
C'est moche car on fait croire au compilateur C que la fonction toto() a été compilée avec un compilateur C. Alors que ce n'est pas le cas. En c++, il y a la surchage, "int toto(int)" est différent de "int toto(long)" et peuvent cohabiter. L'édition de lien C va moins loin et ne peut distinguer "int toto(int)" et "int toto(long)". les deux fonctions ne peuvent cohabiter.
Mais çà marche.
Sinon en regardant le binding, c'est pas très existant. Entre autre les 1, 2, 3 ajoutés à la fin des noms de fonction car la surcharge n'est pas permise, les types qui sont totalement opaque, voir ici par exemple (çà doit être un enfer pour le debuggage) :
http://webcvs.kde.org/cgi-bin/cvsweb.cgi/~checkout~/kdebindings/qtc(...)
Pour un développeur C, il est plus intéressant d'apprendre le C++ que d'utiliser çà.