2013-02-05 43 views
8

Tôi có một số mã mà trông như thế này:Làm thế nào tôi có thể truyền một mảng làm tham số cho một hàm 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 
} 

nơi LogEvent() là một hàm varargs.

Có cách nào hay hơn để thực hiện việc này không?


[Cập nhật] Aplogies to @ 0x69 et al. Tôi bỏ qua để nói rằng có nhiều trường hợp mà LogEvent() không thể lấy một mảng làm tham số. Lấy làm tiếc.

+4

Refactor _LogEvent_ chấp nhận 'LogEvent (1, hoạt động, numActivities) ' –

+0

Bạn có thể chỉ cần cũng vượt qua tất cả trong số họ, nếu có rất ít (ví dụ: 4 max). –

+1

Có thể trùng lặp của [Gọi hàm C với đối số varargs động] (http://stackoverflow.com/questions/280940/calling-a-c-function-with-a-varargs-argument-dynamically) –

Trả lời

2

vượt qua một con trỏ đến mảng ints và một số kiểu int thay vì

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

} 
Các vấn đề liên quan