How can I pass an array as parameters to a vararg function?

孤街浪徒 提交于 2019-12-04 00:58:14

问题


I have some code that looks like this:

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
}

where LogEvent() is a varargs function.

Is there a more elgant way to do this?


[Update] Aplogies to @0x69 et al. I omitted to say that there are many cases where LogEvent() could not take an array as a parameter. Sorry.


回答1:


There's no standard way to construct or manipulate va_args arguments, or even pass them to another function (Standard way to manipulate variadic arguments?, C Programming: Forward variable argument list). You'd be better off seeing if you can access the internal routines of LogEvent.




回答2:


pass a pointer to the array of ints and a number of ints instead

#include <stdio.h>

void logevent(int n, int num, int *l) {
    int i;
    for (i=0; i<num; i++) {
        printf("%d %d\n",n,*(l++));
    }
    }

int main() {

    int activities[8];
    activities[0]=2;
    activities[1]=3;
    activities[2]=4;
    int num=3;
    int n=1;
    logevent(n,num, activities);
    printf("=========\n");
    n=2;
    activities[3]=5;
    num=4;
    logevent(n,num, activities);

}


来源:https://stackoverflow.com/questions/14705920/how-can-i-pass-an-array-as-parameters-to-a-vararg-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!