Няшная / Говнокод #26864 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
#include <stdio.h>
#include <stdlib.h>

#define SPLICE(a,b) SPLICE_1(a,b)
#define SPLICE_1(a,b) SPLICE_2(a,b)
#define SPLICE_2(a,b) a##b
 
 
#define PP_ARG_N( \
          _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, _62, _63, N, ...) N
 
/* Note 63 is removed */
#define PP_RSEQ_N()                                        \
         62, 61, 60,                                       \
         59, 58, 57, 56, 55, 54, 53, 52, 51, 50,           \
         49, 48, 47, 46, 45, 44, 43, 42, 41, 40,           \
         39, 38, 37, 36, 35, 34, 33, 32, 31, 30,           \
         29, 28, 27, 26, 25, 24, 23, 22, 21, 20,           \
         19, 18, 17, 16, 15, 14, 13, 12, 11, 10,           \
          9,  8,  7,  6,  5,  4,  3,  2,  1,  0
 
#define PP_NARG_(...)    PP_ARG_N(__VA_ARGS__)    
 
/* Note dummy first argument _ and ##__VA_ARGS__ instead of __VA_ARGS__ */
#define PP_NARG(...)     PP_NARG_(_, ##__VA_ARGS__, PP_RSEQ_N())


#define PRINT_1(a1) \
  printf(a1);
 
#define PRINT_2(a1, b1) \
  printf(a1, b1);
 
#define PRINT_3(a1, b1, a2) \
  PRINT_2(a1, b1); PRINT_1(a2)
 
#define PRINT_4(a1, b1, a2, b2) \
  PRINT_2(a1, b1); PRINT_2(a2, b2);
 
#define PRINT_5(a1, b1, a2, b2, a3) \
  PRINT_4(a1, b1, a2, b2); PRINT_1(a3);
 
#define PRINT_6(a1, b1, a2, b2, a3, b3) \
  PRINT_4(a1, b1, a2, b2); PRINT_2(a3, b3)
 
#define PRINT_7(a1, b1, a2, b2, a3, b3, a4) \
  PRINT_6(a1, b1, a2, b2, a3, b3); PRINT_1(a4)
 
#define PRINT_8(a1, b1, a2, b2, a3, b3, a4, b4) \
  PRINT_6(a1, b1, a2, b2, a3, b3);  PRINT_2(a4, b4);
//..... дальше лень ...
 
#define PRINTS_(N, ...) \
  SPLICE(PRINT_, N)(__VA_ARGS__)
 
#define PRINTS(...) \
  PRINTS_(PP_NARG(__VA_ARGS__), __VA_ARGS__)


int main(void)
{
    PRINTS("10 = %d", 10, "; 3 + 3 = %d", 3+3, "\n" );
    return EXIT_SUCCESS;
}

Имитация крестопарашного cout через препроцессор
https://wandbox.org/permlink/px4DCDSCGfUlbcFL

Запостил: j123123 j123123, (Updated )

Комментарии (8) RSS

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8