C-Programmierung
Parameterlisten
← Ellipsen | ● | Parameterpaare →
Der Header stdarg.h stellt Funktionen bereit, welche die notwendigen Adressberechnungen der Parameterliste einer Ellipse vornehmen. Dazu hält man sich an folgende Programmierschritte:
- Deklaration eines Adress-Zeigers
va_list arg_ptr;
- Initialisierung des Zeigers auf die erste unbenamte Folgeadresse
va_start(arg_ptr, last_parameter_name);
- Ermittelung des aktuellen Arguments und Setzen des Zeigers auf die nächste Folgeadresse
parameter_type v=va_arg(arg_ptr, parameter_type))
- Wiederholung bis das aktuelle Argument das Parameterende anzeigt
- ZurĂĽcksetzen in den Ausgangszustand
va_end(arg_ptr);
Anwendungsbeispiel:
#include <stdarg.h>
/* calculate sum of arbitrary number of arguments */
double sum(double value, ...)
{
va_list arg_ptr;
double v,s;
va_start(arg_ptr, value);
for (s=value; (v=va_arg(arg_ptr, double))!=0.0;)
s+=v;
va_end(arg_ptr);
return(s);
}
double s=sum(1.0, 2.0, 0.0)+sum(1.0, 2.0, 3.0, 0.0);
/* calculate sum of arbitrary number of arguments */
double sum(double value, ...)
{
va_list arg_ptr;
double v,s;
va_start(arg_ptr, value);
for (s=value; (v=va_arg(arg_ptr, double))!=0.0;)
s+=v;
va_end(arg_ptr);
return(s);
}
double s=sum(1.0, 2.0, 0.0)+sum(1.0, 2.0, 3.0, 0.0);
Fallgrube: Hält man sich nicht an die vereinbarte Konvention und vergisst den Endwert 0, so hat dies eine Endlosschleife zur Folge, die einen Stapelunterlauf und damit eine Speicherverletzung verursacht.
← Ellipsen | ● | Parameterpaare →