File: variadic4.c

package info (click to toggle)
chibicc 1.0.23.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,832 kB
  • sloc: ansic: 62,911; sh: 275; makefile: 92
file content (61 lines) | stat: -rw-r--r-- 1,664 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <stddef.h>
#include <stdarg.h>
#include <stdint.h>
#include "test.h"

void test_variadic(int count, ...) {
  va_list ap;
  va_start(ap, count);

  char c   = va_arg(ap, int);               // promoted
  unsigned char uc = va_arg(ap, int);       // promoted
  short s  = va_arg(ap, int);               // promoted
  unsigned short us = va_arg(ap, int);      // promoted
  int i    = va_arg(ap, int);
  unsigned int ui = va_arg(ap, unsigned int);
  long l   = va_arg(ap, long);
  unsigned long ul = va_arg(ap, unsigned long);
  long long ll = va_arg(ap, long long);
  unsigned long long ull = va_arg(ap, unsigned long long);

  float f  = (float)va_arg(ap, double);     // promoted to double
  double d = va_arg(ap, double);

  printf("char: %d\n", c);
  printf("unsigned char: %u\n", uc);
  printf("short: %d\n", s);
  printf("unsigned short: %u\n", us);
  printf("int: %d\n", i);
  printf("unsigned int: %u\n", ui);
  printf("long: %ld\n", l);
  printf("unsigned long: %lu\n", ul);
  printf("long long: %lld\n", ll);
  printf("unsigned long long: %llu\n", ull);
  printf("float: %f\n", f);
  printf("double: %f\n", d);
  ASSERT(-1, c);
  ASSERT(255, uc);
  ASSERT(-12345, s);
  ASSERT(54321, us);
  ASSERT(-123456, i);
  ASSERT(123456u, ui);
  ASSERT(-123456789L, l);
  ASSERT(123456789UL, ul);
  ASSERT(-123456789012345LL, ll);
  ASSERT(123456789012345ULL, ull);
  ASSERT(1.25f, f);
  ASSERT(3.14159, d);

  va_end(ap);
}

int main() {
  test_variadic(12,
    (char)-1, (unsigned char)255,
    (short)-12345, (unsigned short)54321,
    -123456, 123456u,
    -123456789L, 123456789UL,
    -123456789012345LL, 123456789012345ULL,
    1.25f, 3.14159
  );
}