vararg.c
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
int sum (int nArgs, ...);
void PrintArgs(char *format, ...);
int main() {
int a = 5, b = 7, c = 11, d = 13, e = 18, result;
double db = 3.45;
char ch = 'x';
char *st1 = "Random string";
char *st2 = "Another random string";
result = sum(3, a, b, c);
printf("%d + %d + %d = %d\n", a, b, c, result);
result = sum(4, a, b, d, e);
printf("%d + %d + %d + %d = %d\n", a, b, d, e, result);
result = sum(5, a, b, c, d, e);
printf("%d + %d + %d + %d + %d = %d\n\n", a, b, c, d, e, result);
PrintArgs("csds", ch, st1, db, st2);
return EXIT_SUCCESS;
}
int sum(int nArgs, ...) {
int result = 0;
va_list argptr;
va_start(argptr, nArgs);
while ( nArgs-- )
result += va_arg(argptr, int);
va_end(argptr);
return result;
}
void PrintArgs(char *format, ...) {
int n = 0;
va_list argptr;
va_start(argptr, format);
while ( format[n] ) {
switch ( format[n] ) {
case 'c':
printf("Argument %d is a char, and is set to: %c\n",
n + 1, va_arg(argptr, char));
break;
case 's':
printf("Argument %d is a string, and is set to: %s\n",
n + 1, va_arg(argptr, char*));
break;
case 'd':
printf("Argument %d is a double, and is set to: %f\n",
n + 1, va_arg(argptr, double));
break;
default:
printf("Unsupported argument.\n");
exit(EXIT_FAILURE);
}
++n;
}
va_end(argptr);
}
Please send all comments, suggestions, bug reports etc to mail@paulgriffiths.net