fork download
  1. #include <stdio.h>
  2.  
  3. #define __NARG(unused, _1, _2, _3, _4, _5, VAL, ...) VAL
  4. #define NARG(...) __NARG(unused, ##__VA_ARGS__, 5, 4, 3, 2, 1, 0)
  5.  
  6. #define __STRINGIFY(...) #__VA_ARGS__
  7. #define _STRINGIFY(...) __STRINGIFY(__VA_ARGS__)
  8. #define STRINGIFY(...) _STRINGIFY(__VA_ARGS__)
  9.  
  10. #define DO_SOMETHING_0(...) ZERO
  11. #define DO_SOMETHING_1(...) ONE
  12. #define DO_SOMETHING_2(...) TWO
  13. #define DO_SOMETHING_3(...) THREE
  14. #define DO_SOMETHING_4(...) FOUR
  15.  
  16. #define __DO_SOMETHING(narg, ...) STRINGIFY(DO_SOMETHING_ ## narg (__VA_ARGS__))
  17. #define _DO_SOMETHING(narg, ...) __DO_SOMETHING(narg, __VA_ARGS__)
  18. #define DO_SOMETHING(...) _DO_SOMETHING(NARG(__VA_ARGS__), __VA_ARGS__)
  19.  
  20. int main()
  21. {
  22. puts(DO_SOMETHING());
  23. puts(DO_SOMETHING(Hello));
  24. puts(DO_SOMETHING(Hello, World));
  25. puts(DO_SOMETHING(Hello, World, This));
  26. puts(DO_SOMETHING(Hello, World, This, Is));
  27. }
Runtime error #stdin #stdout 0.02s 1720KB
stdin
Standard input is empty
stdout
ZERO
ONE
TWO
THREE
FOUR