C'est quoi cette declaration C ?

C'est quoi cette declaration C ? - C - Programmation

Marsh Posté le 10-08-2004 à 19:00:01    

void gaim_perl_callXS(void (*subaddr)(pTHX_ CV *cv), CV *cv, SV **mark);  
 
le pTHX_ CV *cv :??:
 
en tout cas le compilo gcc 2.95.4 n'aime pas du tout cette syntaxe, ca correspond a quoi :??:

Reply

Marsh Posté le 10-08-2004 à 19:00:01   

Reply

Marsh Posté le 10-08-2004 à 19:04:05    

subaddr est un pointeur sur une fonction, c'est ce que tu voulais savoir  ?

Reply

Marsh Posté le 10-08-2004 à 19:04:10    

un pointeur de fonction :o
 
void fonction(pTHX_ CV *cv);
 
 
en gros, c'est un callback

Reply

Marsh Posté le 10-08-2004 à 19:05:52    

Joce qui tiens à débugguer chaque programme qui lui passe entre les mains. :D

Reply

Marsh Posté le 10-08-2004 à 19:09:52    

les pointeurs de fonctions ont cela de marrant que  
 
*f == f donc   f() == *************************f()

Reply

Marsh Posté le 10-08-2004 à 19:30:48    

ceci dit je comprends toujours pas la syntaxe de la déclaration :D

Reply

Marsh 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
Reply

Marsh 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 :??:

Reply

Marsh 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

Reply

Marsh 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 :o


Message édité par joce le 10-08-2004 à 20:21:33
Reply

Marsh Posté le 10-08-2004 à 20:21:00   

Reply

Marsh 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

Reply

Marsh 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

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh 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
 

Reply

Marsh Posté le 10-08-2004 à 20:26:39    

el muchacho a écrit :

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.


 
ca te choque pas un type "pTHX_ CV" toi ? :D moi si :o


Message édité par joce le 10-08-2004 à 20:27:20
Reply

Marsh Posté le 10-08-2004 à 20:27:12    

envoie un rapport de bug :o

Reply

Marsh Posté le 10-08-2004 à 20:28:21    

joce a écrit :

ca te choque pas un type "pTHX_ CV" toi ? :D moi si :o


 
Merde, tu m'as lu avant que j'efface mon pipo.  :D  
 
Ben macro, quoi ! Le code de Perl en est bourré.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 10-08-2004 à 20:28:49    

Taz a écrit :

envoie un rapport de bug :o

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 :o

Reply

Marsh Posté le 10-08-2004 à 20:29:52    

el muchacho a écrit :

Merde, tu m'as lu avant que j'efface mon pipo.  :D  
 
Ben macro, quoi ! Le code de Perl en est bourré.

donc ma première pensée était la bonne :D
J'ai eu un doute à un moment en pensant à une declaration obscure du C que je connaissais pas :D

Reply

Marsh Posté le 10-08-2004 à 20:36:44    

joce a écrit :

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 :o

"BugHunter"
Faut croire que ta réputation te poursuit. [:dawa]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed