URL: https://linuxfr.org/forums/programmation-c--2/posts/fonctions-variadiques-imbriques Title: Fonctions variadiques imbriques Authors: David Date: 2016年02月03日T15:00:13+01:00 License: CC By-SA Tags: Score: 0 Bonjour Je bricole sur Arduino et ai les bases très basiques du C. (genre pas super à l'aise avec les pointeurs....) J'ai besoin d'aide sur les fonctions variadiques imbriquées. Dans mon code principal, j'appelle la fonction _get_data_nesteed1_ : ```C char url[20] = ""; int args_count = 0; char str1[20] = ""; char str2[20] = ""; get_data_nesteed1( url , &args_count , str1 , str2 ); ``` _str1_ et _str2_ sont les arguments variables, _args_count_ est l'argument muet. La fonction _get_data_nesteed1_ : ```C void get_data_nesteed1 ( char * purl , int * pargs_count , ... ) { va_list args; va_start( args, pargs_count ); get_data_nesteed2( "ssss" , purl , pargs_count , args ); va_end( args ); } ``` Cette fonction _get_data_nesteed1_ fait également appel à une fonction variadique _get_data_nesteed2_ en insérant des arguments. L'argument muet change et est _pfmt_. 2 arguments variables ont été insérés. Ils y en a donc maintenant 4. ```C void get_data_nesteed2 ( const char * pfmt , ... ) { va_list args; va_start( args, pfmt ); char *purl = va_arg( args, char * ); strcpy( purl , "http://" ); int *pargs_count = va_arg( args, int * ); *pargs_count = strlen( pfmt ); while (*pfmt != '0円') { char *s = va_arg( args, char * ); strcpy( s , "Message" ); ++pfmt; } va_end( args ); } ``` Une fois de retour dans ma fonction principale, j'obtiens : url : Message args_count : 4 str1 : str2 : age **Donc, il y a un soucis....** Mais si j'appelle directement get_data_nesteed2, j'obtiens bien : url : http:// args_count : 4 str1 : Message str2 : Message Ca ressemble beaucoup à l'exemple _MyPrintf_ fourni ici :https://en.wikipedia.org/wiki/Stdarg.h#Example Sauf que mon argument muet change et que des arguments "constants" deviennent des arguments variables. Il y a une subtilité que je n'ai pas saisie... Un volontaire pour m'expliquer ? J'espère être clair.... Désolé pour le formatage de la fonction get_data_nesteed1, ça passe pas.... Merci. David.

AltStyle によって変換されたページ (->オリジナル) /