fork(2) download
  1. // 可変個数引数マクロの作り方 (gccの場合)
  2.  
  3. #include <stdio.h>
  4.  
  5. // 引数の数が違う、同じ関数に置き換える
  6. #define DEBUG_PRINT(...) printf(__VA_ARGS__)
  7. #define DEBUG_PRINT2(fmt, ...) printf(fmt, __VA_ARGS__)
  8.  
  9. // 引数の数が違う、別の関数に置き換える
  10. #define GET_MACRO(_1,_2,_3,NAME,...) NAME
  11. #define SUM(...) GET_MACRO(__VA_ARGS__, sum3, sum2)(__VA_ARGS__)
  12.  
  13. int sum2(int a,int b) { return a+b; }
  14. int sum3(int a,int b,int c) { return a+b+c; }
  15.  
  16. int main(void) {
  17. DEBUG_PRINT("num=%d\n",2);
  18. DEBUG_PRINT("num=%d,%d\n",3,4);
  19.  
  20. DEBUG_PRINT2("num=%d\n",2);
  21. DEBUG_PRINT2("num=%d,%d\n",3,4);
  22.  
  23. printf("SUM(2,3)=%d\n", SUM(2,3));
  24. printf("SUM(2,3,4)=%d\n", SUM(2,3,4));
  25.  
  26. return 0;
  27. }
  28.  
Success #stdin #stdout 0s 2248KB
stdin
Standard input is empty
stdout
num=2
num=3,4
num=2
num=3,4
SUM(2,3)=5
SUM(2,3,4)=9