yop,
Si une fonction a ce prototype : void fonction (int n, char* format, ...);
Comment peut-elle faire un printf(format, ...); ?
Autrement dit, comment repasser une liste d'arguments variables d'une fonction à une autre ?
J'ai brozé sur le ouaibe sans trouver, et pourtant ça me dit quelque chose cette manière de faire.
Une idée svp ?
Merci bien, c'est une possibilté, peut-être bien la seule d'ailleurs.
Etonnant, qu'il faille implémenter une fonction qui prenne une va_list en argument pour régler ce problème, plutôt que de prévoir un mécanisme côté appelant pour ce genre de chose...
bin vu que l'argument '...' n'a pas de nom, comment tu peux transmettre ça à l'appelé?
rappelle toi qu'en asm, tous les args de ce type de fonction sont pushés sur la pile par l'appelant de la première fonction, puis on fait call.
comment tu ferais pour passer ces "vieux" arguments à une sous-fonction? pas évident de trifouiller sp!
pour s'en sortir, le va_list est en fait un pointeur vers les arguments de la fonction à ptits points.
Zeph Le 30/05/2014 à 10:21 J'ai eu besoin de ça un jour et j'étais tombé sur une lib qui devait permettre de le faire, sauf que bien sûr c'était spécifique à une plate forme (x86) et je n'ai jamais réussi à la faire fonctionner donc je n'ai pas retenu le nom. Le plus simple serait peut-être que tu trouves une autre solution ^^

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
*normalement* si stdarg est bien implémenté sur l'architecture utilisé, l'overhead est plus que minime, rien ou presque n'est a copier, et la lib peux elle même faire des optimisation comme tu l'a fait dans AS suivant l'ABI

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
Link Le 01/06/2014 à 12:24 En fait, à la création de ta fonction, tu devrais toi aussi faire une version va_list et une version "..." qui est juste un wrapper de la version va_list.
Ce que je trouve plus emmerdant, c'est l'absence d'API standard (ou non-standard, d'ailleurs) pour créer de toutes pièces une va_list.

Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.
J'attends avec une impatience terrible le switch -std=c15 qui permettra ça, notamment par la surcharge de fonction (pas question que je fasse ça de manière non-trnasparente).
Surtout qu'il n'y a, je pense, rien qui n'empêche d'ajouter cette feature au C. Tout comme l'affectation d'une variable structure à une autre, et bien d'autres choses encore.
Zeph Le 01/06/2014 à 21:03Edité par Zeph le 01/06/2014 à 21:24 Ben... si ? Je ne vois ni le rapport avec classes et héritage, ni pouquoi ça serait plus ou moins utile sans.
[edit] je complète, même si ça m'énerve ces posts à la "machin c'est de la merde" surtout quand le sujet n'est pas maitrisé, vous pouvez quand même émettre un minimum de réserve dans vos jugements non ?
Bon, la surcharge ça n'a strictement rien à voir avec les classes, l'héritage ou je ne sais quoi d'autre. C'est simplement prendre en compte les types des paramètres en plus du nom d'une fonction dans sa signature. Et je ne vois pas non plus pourquoi ça irait casser les ABI...
Si le C proposait cette "mauvaise idée" qu'est la surcharge ça permettrait de n'avoir par exemple qu'une seule fonction "abs" qui prenne n'importe quel type numérique en paramètre au lieu de 50 noms différents "abs", "fabs", "fabsl", "fabsf" et autres fantaisies impossibles à retenir. Même chose pour les tonnes de doublons dans stdlib qui n'existent justement que parce que le C ne propose pas de surcharge.

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
Oui ABI n'est pas le bon terme, signature lui est le bon.
Le C n'a pas de mangling a la C++ et la raison est assez simple, vous avez déjà regardé le mangling d'une fonction C++ ? C'est juste imbuvable, et c'est inutilisable en direct en assembleur.
Le C n'est PAS un langage de haut niveau, moins de fonctionnalité a la con sont présente dans le langage, mieux il se porte, c'est un langage fait pour faire du système, pas pour faire des "truc fantaisies" et le polymorphisme est quelque chose qui enlève une partie du contrôle qu'on peu avoir sur le langage. Et puis apres on ajoute quoi ? la surcharge des opérateurs ? Comme ça on peux faire du cin/cout en C ?

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
(tu cherches à montrer quoi, là ? ...)
Dit tout de suite que ce que j'ai écrit est incomprehensible et qu'il faudrait que j'aille dormir ?

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.
Ben le mangling est indispensable pour la surcharge...

Proud to be CAKE©®™
GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.