Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use a portable inline and declare variables at the beginning
[simgrid.git] / buildtools / Cmake / test_prog / prog_va_copy.c
1 #include <stdlib.h>
2         #include <stdarg.h>
3         #include <string.h>
4         #define DO_VA_COPY(d,s) memcpy((void *)(d), (void *)(s)), sizeof(*(s))
5         void test(char *str, ...)
6         {
7             va_list ap, ap2;
8             int i;
9             va_start(ap, str);
10             DO_VA_COPY(ap2, ap);
11             for (i = 1; i <= 9; i++) {
12                 int k = (int)va_arg(ap, int);
13                 if (k != i)
14                     abort();
15             }
16             DO_VA_COPY(ap, ap2);
17             for (i = 1; i <= 9; i++) {
18                 int k = (int)va_arg(ap, int);
19                 if (k != i)
20                     abort();
21             }
22             va_end(ap);
23         }
24         int main(int argc, char *argv[])
25         {
26             test(test, 1, 2, 3, 4, 5, 6, 7, 8, 9);
27             exit(0);
28         }