#include "stdio.h" #include "stdarg.h" void minprintf(char *fmt, ...); void errmsg(int code, ...); int errorf(const char *format, ...); int sum(int num, ...); int sum1(int num, ...); int FILENAME=1, LINENUMBER=2, WARN=4; main(int argc, char *argv[]) { char *s = "HELLO"; int x = 10; double f = 10.0; errmsg(1, "", "cannot open %s\n", "a_file"); errmsg(3,"",7,"cannot open %s\n","a_file"); errmsg(2, 7, "cannot open %s\n", "a_file"); errmsg(4, " %s, x=%d", "a_file", 10); minprintf("x = %d, f = %f, s = %s\n", x, f, s); minprintf("s = %s, x = %d, f = %f, s = %s\n", s, x, f, s); errorf("x = %d, f = %f, s = %s\n", x, f, s); printf("sum = %d\n", sum(4, 1, 2, 3, 4)); printf("sum1 = %d\n", sum1(4, 1, 2, 3, 4)); //sum1(4, 1, 2, 3, 4); } int errorf(const char *format, ...) { static int num_errors = 0; int n; va_list ap; num_errors++; fprintf(stderr, " ** Error %d: ", num_errors); va_start(ap, format); n = vfprintf(stderr, format, ap); va_end(ap); fprintf(stderr, "\n"); return n; } void errmsg(int code, ...) { va_list ap; char *fmt; va_start(ap, code); if (code&FILENAME) (void)fprintf(stderr, "\"%s\":", va_arg(ap, char *)); if (code&LINENUMBER) (void)fprintf(stderr, "%d:", va_arg(ap, int)); if (code&WARN) (void)fputs("Warning:", stderr); fmt = va_arg(ap, char *); (void) vfprintf(stderr, fmt, ap); va_end(ap); } int sum(int num, ...) { va_list ap; int i, n = 0; va_start(ap, num); for (i=0; i