LIBGRAPHC - DESSIN D'UI EN MODE CONSOLE

Messages postés
968
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
- - Dernière réponse : 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

Afficher la suite 
cs_juju12
Messages postés
968
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4 -
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.
Nenyan
Messages postés
4
Date d'inscription
dimanche 24 février 2008
Statut
Membre
Dernière intervention
12 mai 2009
-
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
968
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4 -
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];
...
}
le_papy
Messages postés
15
Date d'inscription
mercredi 29 mars 2006
Statut
Membre
Dernière intervention
6 juillet 2009
-
Merci pour ton code, très intéressant, je m'apprête à le décortiquer!