【问题标题】:How can I pass an array as parameters to a vararg function?如何将数组作为参数传递给可变参数函数?
【发布时间】:2013-01-20 06:50:00
【问题描述】:

我有一些看起来像这样的代码:

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
}

其中 LogEvent() 是一个可变参数函数。

有没有更优雅的方式来做到这一点?


[更新] 向@0x69 等人致歉。我没有说 LogEvent() 在很多情况下不能将数组作为参数。对不起。

【问题讨论】:

标签: c variadic-functions


【解决方案1】:

没有标准的方法来构造或操作va_args 参数,甚至将它们传递给另一个函数(Standard way to manipulate variadic arguments?C Programming: Forward variable argument list)。你最好看看你是否可以访问LogEvent的内部例程。

【讨论】:

    【解决方案2】:

    传递一个指向整数数组的指针和一些整数

    #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);
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-22
      • 2013-01-27
      • 1970-01-01
      • 2014-10-20
      • 2012-12-07
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多