C-Programmierung
Parameterpaare
← Parameterlisten | ● | Listenparameter →
Sind die Ellipsen-Parameter von unterschiedlichem Typ, so wird vereinbart, dass der Datentyp mit Hilfe von Parameterpaaren codiert wird.
double sum(char format, ...);
double s=sum('d', 1.0, 'f', 2.0f, '.')+sum('d', 1.0, 'f', 2.0f, 'i', 3, '.');
double s=sum('d', 1.0, 'f', 2.0f, '.')+sum('d', 1.0, 'f', 2.0f, 'i', 3, '.');
#include <stdarg.h>
double sum(char format, ...)
{
va_list arg_ptr;
double v,s;
char c;
va_start(arg_ptr, format);
for (c=format,s=0.0; c!='.';)
{
switch (c)
{
case 'f':
case 'd': v=va_arg(arg_ptr, double); break;
default:
case 'i': v=va_arg(arg_ptr, int); break;
}
s+=v;
c=va_arg(arg_ptr, int);
}
va_end(arg_ptr);
return(s);
}
double sum(char format, ...)
{
va_list arg_ptr;
double v,s;
char c;
va_start(arg_ptr, format);
for (c=format,s=0.0; c!='.';)
{
switch (c)
{
case 'f':
case 'd': v=va_arg(arg_ptr, double); break;
default:
case 'i': v=va_arg(arg_ptr, int); break;
}
s+=v;
c=va_arg(arg_ptr, int);
}
va_end(arg_ptr);
return(s);
}
C-Konvention: char und short werden beim Aufruf einer Ellipse immer als int abgelegt und float wird immer als double abgelegt.
Fallgrube: Die Argumente müssen den erwarteten Typen entsprechen, andernfalls erhält man seltsame Ergebnisse.
← Parameterlisten | ● | Listenparameter →