LIBGRAPHC - DESSIN D'UI EN MODE CONSOLE

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 12 mai 2009 à 17:57
le_papy Messages postés 15 Date d'inscription mercredi 29 mars 2006 Statut Membre Dernière intervention 6 juillet 2009 - 6 juil. 2009 à 09:43
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50000-libgraphc-dessin-d-ui-en-mode-console

le_papy Messages postés 15 Date d'inscription mercredi 29 mars 2006 Statut Membre Dernière intervention 6 juillet 2009
6 juil. 2009 à 09:43
Merci pour ton code, très intéressant, je m'apprête à le décortiquer!
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
12 mai 2009 à 21:42
euh si on veut...
considère simplement que les arguments sont stockés l'un après l'autre dans une zone de mémoire spéciale (la pile, qui sert à contenir variables locales, arguments et adresses de retour).
Le compilateur ne fait pas de différence entre arguments fixes et arguments optionnels, lors de l'appel de la fonction il se contente de tout empiler.

petit exemple, pour appeler Sum(2,1,3) :
__asm
{
...
push 3L;
push 1L;
push 2L;
call dword ptr[Sum];
...
}
Nenyan Messages postés 4 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 12 mai 2009
12 mai 2009 à 18:07
Effectivement, ton petit bout de code m'éclaire bien =).

Donc si j'ai tout suivi, le ... est l'équivalent d'un tableau, dont le premier élément est stocké a l'adresse suivant directement celle ou est stockée n.
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
12 mai 2009 à 17:57
Juste pour info, puisque tu dis avoir eu du mal à trouver, une petite variante pour l'utilisation d'arguments variables sans varlist :
il suffit de récupérer l'adresse mémoire du dernier argument fixe, de cette manière on peut accéder aux suivants par un pointeur.

par exemple, une fonction Sum(unsigned n,...) qui additionne n entiers :

unsigned Sum(unsigned n,...)
{
unsigned *data=1+&n;
unsigned i,result=0;
for(i=0;i<n;i++) result+=data[i];
return result;
}

et on peut appeler Sum(2,1,1) ou Sum(3,1,4,178) ou ...


c'est sans doute ce que fait varlist implicitement.
Rejoignez-nous