1/* varargs.c - 2 * (Added as part of fix for bug 15306 - "call" to varargs functions fails) 3 * This program is intended to let me try out "call" to varargs functions 4 * with varying numbers of declared args and various argument types. 5 * - RT 9/27/95 6 */ 7 8#include <stdio.h> 9#include <stdarg.h> 10 11int find_max1(int, ...); 12int find_max2(int, int, ...); 13double find_max_double(int, double, ...); 14 15char ch; 16unsigned char uc; 17short s; 18unsigned short us; 19int a,b,c,d; 20int max_val; 21long long ll; 22float fa,fb,fc,fd; 23double da,db,dc,dd; 24double dmax_val; 25 26int main() { 27 c = -1; 28 uc = 1; 29 s = -2; 30 us = 2; 31 a = 1; 32 b = 60; 33 max_val = find_max1(1, 60); 34 max_val = find_max1(a, b); 35 a = 3; 36 b = 1; 37 c = 4; 38 d = 2; 39 max_val = find_max1(3, 1, 4, 2); 40 max_val = find_max2(a, b, c, d); 41 da = 3.0; 42 db = 1.0; 43 dc = 4.0; 44 dd = 2.0; 45 dmax_val = find_max_double(3, 1.0, 4.0, 2.0); 46 dmax_val = find_max_double(a, db, dc, dd); 47 48 return 0; 49} 50 51/* Integer varargs, 1 declared arg */ 52 53int find_max1(int num_vals, ...) { 54 int max_val = 0; 55 int x; 56 int i; 57 va_list argp; 58 va_start(argp, num_vals); 59 printf("find_max(%d,", num_vals); 60 for (i = 0; i < num_vals; i++) { 61 x = va_arg(argp, int); 62 if (max_val < x) max_val = x; 63 if (i < num_vals - 1) 64 printf(" %d,", x); 65 else 66 printf(" %d)", x); 67 } 68 printf(" returns %d\n", max_val); 69 return max_val; 70} 71 72/* Integer varargs, 2 declared args */ 73 74int find_max2(int num_vals, int first_val, ...) { 75 int max_val = 0; 76 int x; 77 int i; 78 va_list argp; 79 va_start(argp, first_val); 80 x = first_val; 81 if (max_val < x) max_val = x; 82 printf("find_max(%d, %d", num_vals, first_val); 83 for (i = 1; i < num_vals; i++) { 84 x = va_arg(argp, int); 85 if (max_val < x) max_val = x; 86 printf(", %d", x); 87 } 88 printf(") returns %d\n", max_val); 89 return max_val; 90} 91 92/* Double-float varargs, 2 declared args */ 93 94double find_max_double(int num_vals, double first_val, ...) { 95 double max_val = 0; 96 double x; 97 int i; 98 va_list argp; 99 va_start(argp, first_val); 100 x = first_val; 101 if (max_val < x) max_val = x; 102 printf("find_max(%d, %f", num_vals, first_val); 103 for (i = 1; i < num_vals; i++) { 104 x = va_arg(argp, double); 105 if (max_val < x) max_val = x; 106 printf(", %f", x); 107 } 108 printf(") returns %f\n", max_val); 109 return max_val; 110} 111 112