en tout cas le compilo gcc 2.95.4 n'aime pas du tout cette syntaxe, ca correspond a quoi
Publicité
Posté le 10-08-2004 à 19:00:01
cris56
Posté le 10-08-2004 à 19:04:05
subaddr est un pointeur sur une fonction, c'est ce que tu voulais savoir ?
Taz
bisounours-codeur
Posté le 10-08-2004 à 19:04:10
un pointeur de fonction
void fonction(pTHX_ CV *cv);
en gros, c'est un callback
alien conspiracy
hardtrance addict
Posté le 10-08-2004 à 19:05:52
Joce qui tiens à débugguer chaque programme qui lui passe entre les mains.
Taz
bisounours-codeur
Posté le 10-08-2004 à 19:09:52
les pointeurs de fonctions ont cela de marrant que
*f == f donc f() == *************************f()
joce
Architecte / Développeur principal "BugHunter"
Posté le 10-08-2004 à 19:30:48
ceci dit je comprends toujours pas la syntaxe de la déclaration
Taz
bisounours-codeur
Posté le 10-08-2004 à 19:41:07
// ici déclaration de fonction
void fonction (pTHX_ CV *cv);
// là un pointeur (une variable)
void (*fonction) (pTHX_ CV *cv);
me dis pas que tu as jamais utilisé qsort ?
Message édité par Taz le 10-08-2004 à 19:42:02
joce
Architecte / Développeur principal "BugHunter"
Posté le 10-08-2004 à 20:13:59
si j'ai déjà vu qsort.
ca m'aide pas plus ton truc le pTHX_ CV *cv il signifie quoi en pratique cv est de quel type
Taz
bisounours-codeur
Posté le 10-08-2004 à 20:15:26
je sais pas c'est juste que c'est un pointeur de fonction retournant void et acceptant en paramètre un pointeur (ici argument nommé cv), pointeur sur pTHX_CV
joce
Architecte / Développeur principal "BugHunter"
Posté le 10-08-2004 à 20:21:00
ce qui m'ennuie c'est l'espace entre pTHX_ et CV en fait, c'est ca que je capte pas depuis le debut, pour le reste les pointeurs sur fonction je connais
Message édité par joce le 10-08-2004 à 20:21:33
Publicité
Posté le 10-08-2004 à 20:21:00
Taz
bisounours-codeur
Posté le 10-08-2004 à 20:22:59
merde j'avais pas vu
gcc -E
y a fort a parier que CV est une macro de const
el muchacho
Comfortably Numb
Posté le 10-08-2004 à 20:25:21
Le code de Perl est bourré de macros.
Message édité par el muchacho le 10-08-2004 à 20:26:31
Architecte / Développeur principal "BugHunter"
Posté le 10-08-2004 à 20:25:49
j'avais pensé aussi à une macro, mais j'en avais pas vu la trace, j'ai du la louper.
En tout cas gcc n'était pas content du tout :
In file included from perl.c:93:
perl-common.h:28: parse error before `CV'
perl.c:214: parse error before `CV'
perl.c: In function `gaim_perl_callXS':
perl.c:219: `aTHX_' undeclared (first use in this function)
perl.c:219: (Each undeclared identifier is reported only once
perl.c:219: for each function it appears in.)
perl.c:219: parse error before `cv'
perl.c: In function `destroy_package':
perl.c:403: warning: passing arg 1 of `Perl_newSVpv' discards qualifiers from pointer target type
gmake[3]: *** [perl.lo] Error 1
gmake[3]: Leaving directory `/home/fournier/gaim/gaim-0.81/plugins/perl'
gmake[2]: *** [all-recursive] Error 1
gmake[2]: Leaving directory `/home/fournier/gaim/gaim-0.81/plugins'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/home/fournier/gaim/gaim-0.81'
gmake: *** [all] Error 2
joce
Architecte / Développeur principal "BugHunter"
gaim_perl_callXS est une fonction qui accepte en argument :
- un pointeur de fonction qui elle-même accepte en argumant un pointeur de type pTHX_ CV et ne retourne rien, - un pointeur de type CV,
- un pointeur de pointeur (un handle) de type SV.
C'est tout simple !
Il me semble qu'il existe depuis longtemps un petit programme qui permet d'écrire en clair les déclarations C les plus obscures. Je ne me souviens plus de son nom malheureusement. Un truc comme cdeclare.
encore ca fait le deuxième client que je compile et où il avait une erreur dans le premier (clientIcq dernier version) ils utilisaient une variable qu'ils ne déclaraient que quand on avait HAVE_OPENSSL, donc forcement le compilo était moyennement content sans ca
joce
Architecte / Développeur principal "BugHunter"
encore ca fait le deuxième client que je compile et où il avait une erreur dans le premier (clientIcq dernier version) ils utilisaient une variable qu'ils ne déclaraient que quand on avait HAVE_OPENSSL, donc forcement le compilo était moyennement content sans ca
"BugHunter"
Faut croire que ta réputation te poursuit.