A programozásban a változó számú argumentummal rendelkező függvényeket variadicusnak nevezzük.
Számos matematikai és logikai művelet létezik, amelyeket a legjobban változó számú argumentumú függvényekkel lehet megvalósítani, például számok összegzésével vagy karakterláncok összefűzésével .
A változó számú argumentumú függvények C programozási nyelvben való megvalósításához hozzá kell adni a fejlécfájlt stdarg.h. Korábban használt varargs.h, amely elavult. C++ esetén ennek a fejlécfájlnak a neve cstdarg[1] .
#include <stdarg.h> dupla átlag ( int count , ...) { va_list ap ; int j ; dupla összeg = 0 ; va_start ( ap , count ); /* Az utolsó ismert argumentum szükséges (az első ismeretlen címének lekéréséhez) */ for ( j = 0 ; j < szám ; j ++ ) { összeg += va_arg ( ap , double ); /* Növeli az ap-t a következő argumentumig. */ } va_end ( ap ); visszatérési összeg / szám ; }Ez a függvény lehetővé teszi az átlagos érték kiszámítását tetszőleges számú argumentumból. Vegye figyelembe, hogy a függvény nem ismeri az argumentumok számát és típusát. A fenti példában szereplő függvény elvárja, hogy a típusok legyenek, doubleés hogy az első argumentumban a paraméterek száma kerüljön átadásra. Más esetekben, például a printf() függvény esetében, az argumentumok számát és típusát a rendszer a formátum karakterláncból vezeti le.
Általában ismernie kell az alapértelmezett típusú előléptetési szabályt, amely kimondja, hogy minden függvényargumentum előléptet, beleértve az ismeretlen argumentumokat is. Így, ha a fenti példában az ismeretlen argumentumok típusát deklarálnák float, akkor valójában típusúak lennének double, és a függvény típust várna double, nem float. Ez zavart és hibákat okozhat, ha egy függvény egy bizonyos dimenziójú argumentumot vár, de más dimenziójú argumentumot kap. A makró használata NULLa variadic függvényekben különösen veszélyes, mivel NULLC-ben egy adott implementáció határozza meg, és nem kell nulla cast-nak lennie típusba void *, a C++-ban pedig 0-ként van definiálva explicit mutatóvá alakítás nélkül. A 0 típusú szám int, amelynek minimális mérete 16 bit (2 bájt), ami valószínűleg nem akkora, mint a függvényben elvárt mutató.
stdarg.h típust deklarál va_list, és négy makrófüggvényt határoz meg : va_start , va_arg, va_copy és va_end.