scc

A fork of https://git.simple-cc.org/scc/ for Qute

git clone https://git.8pit.net/scc.git

 1#include <assert.h>
 2#include <stdarg.h>
 3#include <stdio.h>
 4#include <stdlib.h>
 5
 6/*
 7output:
 8testing
 9test 1
10test 2
11done
12end:
13*/
14
15void
16vtest(char *fmt, va_list va)
17{
18	int cnt = 1;
19	long long *p;
20
21	while (*fmt) {
22		switch (*fmt++) {
23		case 'c':
24			assert(va_arg(va, int) == cnt++);
25			break;
26		case 's':
27			assert(va_arg(va, int) == cnt++);
28			break;
29		case 'i':
30			assert(va_arg(va, int) == cnt++);
31			break;
32		case 'l':
33			assert(va_arg(va, long) == cnt++);
34			break;
35		case 'q':
36			assert(va_arg(va, long long) == cnt++);
37			break;
38		case 'p':
39			p = va_arg(va, void *);
40			assert(*p == cnt++);
41			break;
42		case 'f':
43			assert(va_arg(va, double) == cnt++);
44			break;
45		default:
46			abort();
47		}
48	}
49}
50
51void
52test(char *s, char *fmt, ...)
53{
54	va_list va, vc;
55
56	puts(s);
57	va_start(va, fmt);
58	va_copy(vc, va);
59	vtest(fmt, vc);
60	va_end(vc);
61	va_end(va);
62}
63
64int
65main()
66{
67	char c;
68	short s;
69	int i;
70	long l;
71	long long ll;
72	float f;
73
74	puts("testing");
75	c = 1;
76	i = 2;
77	l = 3;
78	ll = 4;
79	test("test 1", "cilp", c, i, l, (void *) &ll);
80
81	c = 1;
82	s = 2;
83	ll = 3;
84	f = 4.0;
85	test("test 2", "csqf", c, s, ll, f);
86	puts("done");
87
88	return 0;
89}