va_list und co
-
Hallo,
nehmen wir mal an ich habe eine Sammlung von Objekten, über die iteriert werden kann. Hier abstrahiere ich das mal durch ein Array von int:
int array[MAXSIZE]; int size
Auf jedes Element kann nun durch eine Apply Funktion eine beliebige Funktion angewendet werden. Die Apply Funktion hat folgende Deklaration:
typedef void (*Apply_Func)(int, va_list args); void apply(int * array, int size, Apply_Func func, ...);
Die Parameter hinter func sollen an die übergebene Funktion weitergegeben werden. Hier mal ein Beispiel für apply und eine Funktion:
void Func(int a, va_list args) { int b = va_arg(args, int); printf("%d\n", a+b); } void apply(int * array, int size, Apply_Func func, ...) { va_list args, nargs; va_start(args, func); for (int i = 0; i != size; ++i) { va_copy(nargs, args); func(array[i], args); va_end(nargs); } va_end(args); }
Man könnte das auch so machen:
void Func(int a, va_list args) { va_list nargs; va_copy(nargs, args); int b = va_arg(nargs, int); printf("%d\n", a+b); va_end(nargs); } void apply(int * array, int size, Apply_Func func, ...) { va_list args; va_start(args, func); for (int i = 0; i != size; ++i) { func(array[i], args); } va_end(args); }
Nun meine Frage: Ist beides legal,oder wird eines von den beiden von Standard her verboten? So wie ich den Standard lese, geht beides.