2013-02-05 14 views
8

Mam niektóre kodu, który wygląda tak:Jak mogę przekazać tablicę jako parametry do funkcji 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 
} 

gdzie LogEvent() jest funkcją varargs.

Czy istnieje bardziej elitarny sposób na zrobienie tego?


[Aktualizacja] Aplogies to @ 0x69 i in. Nie powiedziałem, że istnieje wiele przypadków, w których LogEvent() nie może wziąć tablicy jako parametru. Przepraszam.

+4

byłaby _LogEvent_ przyjąć 'LogEvent (1, działania, numActivities)' –

+0

Mogłeś równie dobrze przekazać wszystkie z nich, jeśli jest ich niewiele (np. 4 maks.). –

+1

Możliwy duplikat funkcji [Wywołanie funkcji C z dynamicznym argumentem varargs] (http://stackoverflow.com/questions/280940/calling-a-c-function-witha-a-varargs-argument-dynamicznie) –

Odpowiedz

2

przekazać wskaźnik do tablicy int i liczba int zamiast

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

} 
Powiązane problemy