stdarg.c 871 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include <stdarg.h>
  2. #include <float.h>
  3. #include <limits.h>
  4. #include "test.h"
  5. typedef enum { INT, LONG, DOUBLE, LONG_DOUBLE, POINTER } type;
  6. static void variadic(type t, ...)
  7. {
  8. int i;
  9. long l;
  10. double d;
  11. long double ld;
  12. void *p;
  13. va_list ap;
  14. va_start(ap, t);
  15. switch (t) {
  16. case INT: i = va_arg(ap, int); test_true(i == INT_MAX); break;
  17. case LONG: l = va_arg(ap, long); test_true(l == LONG_MAX); break;
  18. case DOUBLE: d = va_arg(ap, double); test_true(d == DBL_MAX); break;
  19. case LONG_DOUBLE: ld = va_arg(ap, long double); test_true(ld == LDBL_MAX); break;
  20. case POINTER: p = va_arg(ap, void *); test_true(p == 0); break;
  21. }
  22. va_end(ap);
  23. }
  24. void test_stdarg_h(void)
  25. {
  26. testing_header("stdarg.h");
  27. variadic(INT, INT_MAX);
  28. variadic(LONG, LONG_MAX);
  29. /*
  30. variadic(DOUBLE, DBL_MAX);
  31. variadic(LONG_DOUBLE, LDBL_MAX);
  32. */
  33. variadic(POINTER, 0);
  34. testing_end();
  35. }