J'ai environ 30 fonctions variadiques. Chacun accepte un chemin comme argument final .: par exemplePassage d'une ellipse à une autre fonction variadique
bool do_foo(struct *f, int q, const char *fmt, ...)
Dans chaque fonction, je dois vérifier que le format élargi est inférieure ou égale à une certaine taille. Donc, je me trouve copier/coller le même morceau de code pour vérifier combien de caractères vsnprintf()
n'a pas imprimé, définir errno
en conséquence et renflouer de l'écriture. Ce que je voudrais faire est d'écrire une fonction pour ce faire, qui retournerait une chaîne (étendue) allouée statiquement qui est connue pour être une taille sûre, ou une chaîne nouvellement initialisée en échec, qui pourrait être vérifiée par rapport à NULL . Les vérifications doivent également déterminer si la chaîne est un chemin absolu ou relatif, ce qui influe sur la taille sûre de la chaîne. C'est beaucoup de code en double et ça commence à sentir.
Existe-t-il un moyen de transmettre le contenu de l'elipsis de l'entrée de ma fonction à une autre fonction? Ou dois-je d'abord appeler va_start()
, puis passer le va_list
à la fonction d'assistance?
Edit:
Je ne suis pas du tout opposé à passer le va_list
à l'aide, je voulais juste vous assurer que rien d'autre existait. Il me semble que le compilateur comprend où les arguments variés commencent, alors j'étais simplement curieux de savoir si je pouvais le faire passer.
Y at-il une raison quelconque vous êtes défavorable à passer le va_list à l'aide? – ojblass
J'ai dû faire des choses de même type mais j'ai dû enlever quelques args ... ce n'était pas un code agréable à maintenir. – ojblass