Comment puis-je passer un tableau en tant que parameters à une fonction vararg?

J’ai un code qui ressemble à ceci:

uint8_t activities[8]; uint8_t numActivities = 0; ... activities[numActivities++] = someValue; ... activities[numActivities++] = someOtherValue; ... switch (numActivities) { 0 : break; 1 : LogEvent(1, activities[0]); break; 2 : LogEvent(1, activities[0], activities[1]); break; 3 : LogEvent(1, activities[0], activities[1], activities[2]); break; // and so on } 

où LogEvent () est une fonction varargs.

Y a-t-il un moyen plus élégant de faire cela?


[Mise à jour] Aplogies à @ 0x69 et al. J’ai omis de dire qu’il existe de nombreux cas où LogEvent () ne peut pas prendre un tableau en tant que paramètre. Pardon.

Il n’y a pas de moyen standard de construire ou de manipuler des arguments va_args , ni même de les passer à une autre fonction ( Manière standard de manipuler des arguments variadiques?, Programmation C: liste d’arguments de variables à suivre ). Vous feriez mieux de voir si vous pouvez accéder aux routines internes de LogEvent .

passe un pointeur vers le tableau d’ints et un nombre d’ints à la place

 #include  void logevent(int n, int num, int *l) { int i; for (i=0; i