🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fr.comp.lang.c
Article #14994

Re: Insérer une fonctions dans une structure?

#14994
From: Pierre Maurette
Date: Wed, 19 Oct 2005 04:39
69 lines
3853 bytes
Nicolas Cherel, le 18/10/2005, a �crit :
> Pierre Maurette wrote:
[...]
>> int carre(int i) {return i * i;}
>> int  cube(int i) {return i * i * i;}
>> 
>> enum {ONE = 10, TWO};
>> 
>> Complex table[] = {
>>     ONE, &cube, "premier message",
>>     TWO, &carre, "deuxi�me message",
>> };
[...]
> En passant, pour les pointeurs de fonction : quelle est la diff�rence entre 
> "&fonction" et "fonction" ?. Un pointeur sur fonction peut �tre allou� avec 
> l'un ou l'autre, sans influence sur le r�sultat.
> Si vous pouvez m'�clairer ...
Si "fonction" le nom d'une fonction - 'function designator' - , c'est 
�quivalent effectivement. N�anmoins, il y a un pied jacon, et mon code 
n'est peut-�tre pas "bon" (bien que techniquement correct).

cube, comme printf, est de type 'fonction retournant un int'. Dans tous 
les cas sauf avec les op�rateurs sizeof et &, il est converti vers le 
type 'pointeur vers fonction retournant un int'. L'op�rateur & fait son 
boulot normal. Pour faire simple et en n�gligeant sizeof, cube, ou 
printf, et &cube, ou &printf, sont toujours remplac�s par &cube ou 
&printf.

Maintenant, imaginons que je modifie mon code, parce que je viens de me 
rendre compte que j'ai un
int cucube(int);
en biblioth�que. Econome, je vais jeter ma fonction cube() et faire:
int (*cube)() = cucube;
Et crack !
cube est de type 'pointeur vers fonction retournant un int', et non pas 
'fonction retournant un int'. Donc, &cube est de type 'pointeur vers 
pointeur vers fonction retournant un int', en fait c'est simplement et 
logiquement l'adresse de ma variable cube, donc boum. Enfin, il y aura 
au moins un warning, quand m�me.
Je n'aurais pas eu de probl�me si j'avais cod�:
Complex table[] = {
    ONE, cube, "premier message",
    TWO, carre, "deuxi�me message",
};


Code pour faire mumuse par les jours pluvieux que nous vivons:

int  cube(char i) {return i * i * i;}

typedef int(*TFonctRetourneInt)();
TFonctRetourneInt fn1 = NULL, fn2 = NULL, fn3 = NULL, fn4 = NULL;

fn1 = printf;
fn2 = &printf;
fn3 = fn2;
fn4 = &fn2;/* caca, warning */

fn1("%p\t%p\t%p\n", cube, &cube, *cube);
fn2("%p\t%p\t%p\n", printf, &printf, *printf);
(*fn1)("%p\t%p\t%p\n", fn2, &fn2, *fn2);
printf("%p\t%p\t%p\n", fn3, &fn3, *fn3);
(*printf)("%p\t%p\t%p\n", fn4, &fn4, *fn4);

/* printf("%lu\n", sizeof cube); */
printf("%lu\n", sizeof &cube);

-- 
Pierre Maurette
Technical Details
Message-ID: <mn.998f7d5aeed9c8ce.31483@laposte.net>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!news.glorb.com!news2.volia.net!solnet.ch!solnet.ch!proxad.net!infeed-2.proxad.net!news1-e.free.fr!not-for-mail
References: <87r7amd6qx.fsf@venus.net> <mn.7ccf7d5a1b906ca4.31483@laposte.net> <43556096$0$7337$636a55ce@news.free.fr>

Show Full Headers
Complete Article Headers
X-Google-Thread: f9822,d00d98e8032f6fc
X-Google-Attributes: gidf9822,public
X-Google-Language: FRENCH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news3.google.com!news.glorb.com!news2.volia.net!solnet.ch!solnet.ch!proxad.net!infeed-2.proxad.net!news1-e.free.fr!not-for-mail
Subject: Re: Insérer une fonctions dans une structure?
From: "Pierre Maurette" <maurettepierre@wanadoo.fr>
References: <87r7amd6qx.fsf@venus.net> <mn.7ccf7d5a1b906ca4.31483@laposte.net> <43556096$0$7337$636a55ce@news.free.fr>
Newsgroups: fr.comp.lang.c
Message-ID: <mn.998f7d5aeed9c8ce.31483@laposte.net>
X-Newsreader: MesNews/1.04.00.00
Date: Wed, 19 Oct 2005 06:39:51 +0200
MIME-Version: 1.0
X-Face: cmi$3R1_J{[}5K|8d'LDiJ$SsZ*gn,j*PhJ#KVGt+45,E_N9O}GrhhQ>fb&q<&lz=g%PEv' u"m)N|KrBMux?2:E?N7Uw3L#H>L#GwM}<qH-?#_Y$B9]$q1"~iUGtN#HVy?}7.`m&iKF>gY:.`W.qu z`1'W'h-AXPmB]#7~<+@H.<0M`-jBkCWbmkcT_*LBVD3|p1a?h1H;cHq{$-vbeP@Hdcqp5z~lwU7ZK `~
Reply-To: maurettepierre@wanadoo.fr
Content-Type: text/plain; charset="iso-8859-15"; format=flowed
Content-Transfer-Encoding: 8bit
X-Antivirus: avast! (VPS 0542-1, 18/10/2005), Outbound message
X-Antivirus-Status: Clean
Lines: 71
Organization: Guest of ProXad - France
NNTP-Posting-Date: 19 Oct 2005 06:38:00 MEST
NNTP-Posting-Host: 84.7.239.61
X-Trace: 1129696680 news1-e.free.fr 1665 84.7.239.61:3058
X-Complaints-To: abuse@proxad.net