fork download
  1. #include <stdio.h>
  2.  
  3. #define DEFINE_TYPE(T) \
  4. typedef struct _type##T { \
  5. T value; \
  6. } Type##T;
  7.  
  8. #define TYPE(T) Type##T
  9.  
  10. #define DEFINE_FUNC(T) \
  11. T func##T(T v) { \
  12. return v + (T)1; \
  13. }
  14.  
  15. #define FUNC(T,V) func##T(V)
  16.  
  17. DEFINE_TYPE(int)
  18. DEFINE_TYPE(char)
  19.  
  20. DEFINE_FUNC(int)
  21. DEFINE_FUNC(char)
  22.  
  23. int main(void) {
  24.  
  25. TYPE(int) x;
  26. TYPE(char) y;
  27.  
  28. x.value = 10;
  29. y.value = 'a';
  30.  
  31. printf("%d\n", x.value);
  32.  
  33. printf("%c\n", y.value);
  34.  
  35. printf("%d\n", FUNC(int, 25));
  36.  
  37. printf("%c\n", FUNC(char, 'X'));
  38.  
  39. return 0;
  40.  
  41. }
  42.  
Success #stdin #stdout 0s 2052KB
stdin
Standard input is empty
stdout
10
a
26
Y