Advertisement
Guest User

Untitled

a guest
Mar 3rd, 2013
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.34 KB | None | 0 0
  1.  
  2. #define SPLICE(a,b) SPLICE_1(a,b)
  3. #define SPLICE_1(a,b) SPLICE_2(a,b)
  4. #define SPLICE_2(a,b) a##b
  5.  
  6.  
  7. #define PP_ARG_N( \
  8.           _1,  _2,  _3,  _4,  _5,  _6,  _7,  _8,  _9, _10, \
  9.          _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, \
  10.          _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, \
  11.          _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, \
  12.          _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, \
  13.          _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, \
  14.          _61, _62, _63, N, ...) N
  15.  
  16. /* Note 63 is removed */
  17. #define PP_RSEQ_N()                                        \
  18.          62, 61, 60,                                       \
  19.          59, 58, 57, 56, 55, 54, 53, 52, 51, 50,           \
  20.          49, 48, 47, 46, 45, 44, 43, 42, 41, 40,           \
  21.          39, 38, 37, 36, 35, 34, 33, 32, 31, 30,           \
  22.          29, 28, 27, 26, 25, 24, 23, 22, 21, 20,           \
  23.          19, 18, 17, 16, 15, 14, 13, 12, 11, 10,           \
  24.           9,  8,  7,  6,  5,  4,  3,  2,  1,  0
  25.  
  26. #define PP_NARG_(...)    PP_ARG_N(__VA_ARGS__)    
  27.  
  28. /* Note dummy first argument _ and ##__VA_ARGS__ instead of __VA_ARGS__ */
  29. #define PP_NARG(...)     PP_NARG_(_, ##__VA_ARGS__, PP_RSEQ_N())
  30.  
  31. #define NARG(...)     func(PP_NARG(__VA_ARGS__), __VA_ARGS__)
  32.  
  33. #define INCR 20
  34.  
  35. #define FIELD_0(...)
  36.  
  37. #define FIELD_1(field, ...) \
  38.   INCR+field
  39.  
  40. #define FIELD_2(field, ...) \
  41.   INCR+field, FIELD_1(__VA_ARGS__)
  42.  
  43. #define FIELD_3(field, ...) \
  44.   INCR+field, FIELD_2(__VA_ARGS__)
  45.  
  46. #define FIELD_4(field, ...) \
  47.   INCR+field, FIELD_3(__VA_ARGS__)
  48.  
  49. #define FIELD_5(field, ...) \
  50.   INCR+field, FIELD_4(__VA_ARGS__)
  51.  
  52. #define FIELD_5(field, ...) \
  53.   INCR+field, FIELD_4(__VA_ARGS__)
  54.  
  55. #define FIELD_6(field, ...) \
  56.   INCR+field, FIELD_5(__VA_ARGS__)
  57.  
  58. #define FIELD_7(field, ...) \
  59.   INCR+field, FIELD_6(__VA_ARGS__)
  60.  
  61. #define FIELD_8(field, ...) \
  62.   INCR+field, FIELD_7(__VA_ARGS__)
  63.  
  64. #define FIELD_9(field, ...) \
  65.   INCR+field, FIELD_8(__VA_ARGS__)
  66.  
  67. #define FIELD_10(field, ...) \
  68.   INCR+field, FIELD_9(__VA_ARGS__)
  69.  
  70. #define FIELD_11(field, ...) \
  71.   INCR+field, FIELD_10(__VA_ARGS__)
  72. //..... дальше лень ...
  73.  
  74. #define FIELDS_(N, ...) \
  75.   SPLICE(FIELD_, N)(__VA_ARGS__)
  76.  
  77. #define FIELDS(...) \
  78.   FIELDS_(PP_NARG(__VA_ARGS__), __VA_ARGS__)
  79.  
  80.  
  81. a = { FIELDS('p', 'a', 's', 's', 'w', 'o', 'r', 'd') };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement