2013-02-05 14 views
8

ho qualche codice che assomiglia a questo:Come posso passare un array come parametri ad una funzione vararg?

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 
} 

dove LogEvent() è una funzione varargs.

C'è un modo più elastico per farlo?


[Aggiorna] Aplogie a @ 0x69 et al. Ho omesso di dire che ci sono molti casi in cui LogEvent() non può prendere un array come parametro. Scusate.

+4

refactoring _LogEvent_ ad accettare 'LogEvent (1, attività, numActivities)' –

+0

Si potrebbe altrettanto bene passare tutti loro, se ce ne sono pochi (es. 4 max). –

+1

Possibile duplicato di [Richiamo dinamico di una funzione C con un argomento varargs] (http://stackoverflow.com/questions/280940/calling-a-c-function-with-a-varargs-argument-dynamically) –

risposta

2

passa un puntatore alla matrice di int e un certo numero di int invece

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

} 
Problemi correlati