2013-02-05 145 views
8

我有一些代碼,看起來像這樣:如何將數組作爲參數傳遞給可變參數函數?

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()是一個可變參數的功能。

有沒有更好的方法來做到這一點?


[更新] Aplogies to @ 0x69 et al。我省略了很多情況,LogEvent()不能將數組作爲參數。抱歉。

+4

重構_LogEvent_接受'的LogEvent(1,活動,numActivities)' –

+0

你也可以同樣通過所有這些,如果有幾個(例如最多4個)。 –

+1

[使用varargs參數動態調用C函數](http://stackoverflow.com/questions/280940/calling-a-c-function-with-a-varargs-argument-dynamically) –

回答

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

} 
相關問題