/* EXPECT: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36 <1.5> 1.1 + 2.1 + 3.1 + 5.1 + 1.5 + -1.5 + 1.5 + -1.5 + 1.5 + -1 = 11.9 fwd()/1: Hello World fwd()/2: Hello World */ #include #include int sum(int x, ...) { va_list ap; va_start(ap, x); printf("%d", x); for (int y; (y = va_arg(ap, int));) { printf(" + %d",y); x += y; } va_end(ap); return x; } double stkarg(double a, double b, double c, double d, double e, double f, double g, double h, double x) { printf(""); return x; } double sumf(double x, ...) { va_list ap; va_start(ap, x); printf("%g", x); for (double y; (y = va_arg(ap, double));) { printf(" + %g",y); x += y; } va_end(ap); return x; } void fwd(const char *fmt, ...) { va_list ap, aq; va_start(ap, fmt); va_copy(aq, ap); printf("fwd()/1: "); vprintf(fmt, ap); va_end(ap); printf("\n"); printf("fwd()/2: "); vprintf(fmt, aq); printf("\n"); va_end(aq); } int main() { printf(" = %d\n", sum(1,2,3,4,5,6,7,8,0,0)); printf("<%g>\n", stkarg(0,0,0,0,0,0,0,0,1.5)); printf(" = %g\n", sumf(1.1, 2.1, 3.1, 5.1, 1.5, -1.5, 1.5, -1.5, 1.5, -1.0, 0.0)); fwd("%s %s", "Hello", "World"); }