Por lo que yo sé, con C ...
la función llamante empuja argumentos en la pila con el fin de derecha a izquierda.
la persona que llama es responsable de eliminar los argumentos de la pila después de que se haya ejecutado la función llamada. Probablemente, esto se debe a que se garantiza a la persona que llama saber cuántos argumentos pone en la pila, mientras que la función llamada puede equivocarse.
P.S .:convenciones de llamada son por lo general aplicación específica. Lo que acabo de describir se conoce como la convención de llamadas "cdecl". Contraste esto con una convención de llamadas generalmente conocida como "stdcall", donde la función llamada es responsable de eliminar sus argumentos de la pila. Por eso, no admite listas de argumentos de longitud variable.
P.P.S .: Como usuario nategoose comentado, que no mencionó cómo las listas de argumentos variables son en realidad utilizado. Ver p. POSIX documentation for the <stdarg.h>
header para más información.
Hasta donde yo sé, las funciones varargs dependen de la implementación. – WhirlWind