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

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

Options: