View difference between Paste ID: r1vJYvc8 and FHUDVzUk
SHOW: | | - or go back to the newest paste.
1
#define PP_ARG_N( \
2
          _1,  _2,  _3,  _4,  _5,  _6,  _7,  _8,  _9, _10, \
3
         _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
4
         _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, \
5
         _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, \
6
         _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, \
7
         _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, \
8
         _61, _62, _63, N, ...) N
9
10
#define PP_RSEQ_N()                                        \
11
         63, 62, 61, 60,                                   \
12
         59, 58, 57, 56, 55, 54, 53, 52, 51, 50,           \
13
         49, 48, 47, 46, 45, 44, 43, 42, 41, 40,           \
14
         39, 38, 37, 36, 35, 34, 33, 32, 31, 30,           \
15
         29, 28, 27, 26, 25, 24, 23, 22, 21, 20,           \
16
         19, 18, 17, 16, 15, 14, 13, 12, 11, 10,           \
17
          9,  8,  7,  6,  5,  4,  3,  2,  1,  0
18
19
#define PP_NARG_(...)    PP_ARG_N(__VA_ARGS__)    
20
21
#define PP_COMMASEQ_N()                                    \
22
          1,  1,  1,  1,                                   \
23
          1,  1,  1,  1,  1,  1,  1,  1,  1,  1,           \
24
          1,  1,  1,  1,  1,  1,  1,  1,  1,  1,           \
25
          1,  1,  1,  1,  1,  1,  1,  1,  1,  1,           \
26
          1,  1,  1,  1,  1,  1,  1,  1,  1,  1,           \
27-
PP_NARG(1)
27+
28
          1,  1,  1,  1,  1,  1,  1,  1,  0,  0
29-
-----
29+
30-
$ gcc -E main.c
30+
31
32-
# 1 "main.c"
32+
33-
# 1 "<built-in>" 1
33+
34-
# 1 "<built-in>" 3
34+
35-
# 321 "<built-in>" 3
35+
36-
# 1 "<command line>" 1
36+
37-
# 1 "<built-in>" 2
37+
38-
# 1 "main.c" 2
38+
39-
# 27 "main.c"
39+
40-
PP_NARG_HELPER3_PP_NARG_(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0main.c:27:1: error: pasting formed ')PP_NARG_', an invalid preprocessing token
40+
41-
PP_NARG(1)
41+
42-
^
42+
43-
main.c:16:11: note: expanded from macro 'PP_NARG'
43+
44
#define PP_NARG_HELPER3_00(N)    1
45-
          ^
45+
46-
main.c:21:37: note: expanded from macro 'PP_NARG_HELPER1'
46+
47
48-
                                    ^
48+
// ----=====================================================================----
49-
main.c:22:59: note: expanded from macro 'PP_NARG_HELPER2'
49+
//     Test
50
// ----=====================================================================----
51-
                                                          ^
51+
52-
) PP_NARG_(PP_COMMA 1 (), 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0)(PP_NARG_(1, PP_RSEQ_N()))
52+
 #include <iostream>
53-
1 error generated.
53+
 using namespace std;
54
 
55
int main()
56
{
57
    cout << PP_NARG(1) << endl;
58
}