1#ifndef test 2#include <stdio.h> 3#include <stdlib.h> 4#include <stdarg.h> 5 6void 7inner (int x, ...) 8{ 9 va_list ap, ap2; 10 va_start (ap, x); 11 va_start (ap2, x); 12 13 switch (x) 14 { 15#define test(n, ret, fmt, args) \ 16 case n: \ 17 vprintf (fmt, ap); \ 18 if (vprintf (fmt, ap2) != ret) \ 19 abort (); \ 20 break; 21#include "vprintf-1.c" 22#undef test 23 default: 24 abort (); 25 } 26 27 va_end (ap); 28 va_end (ap2); 29} 30 31int 32main (void) 33{ 34#define test(n, ret, fmt, args) \ 35 inner args; 36#include "vprintf-1.c" 37#undef test 38 return 0; 39} 40 41#else 42 test (0, 5, "hello", (0)); 43 test (1, 6, "hello\n", (1)); 44 test (2, 1, "a", (2)); 45 test (3, 0, "", (3)); 46 test (4, 5, "%s", (4, "hello")); 47 test (5, 6, "%s", (5, "hello\n")); 48 test (6, 1, "%s", (6, "a")); 49 test (7, 0, "%s", (7, "")); 50 test (8, 1, "%c", (8, 'x')); 51 test (9, 7, "%s\n", (9, "hello\n")); 52 test (10, 2, "%d\n", (10, 0)); 53#endif 54