C99で疑似デフォルト引数
可変長引数マクロと可変長引数関数を組みあわせて引数の最後の1つにデフォルト値を与えることができる。
//This source code is for C99 //Pseudo default-argument feature for C99 #include <stdio.h> #define func(...) func_impl(__VA_ARGS__, -1) void func_impl(int arg1, int arg2, int arg3, ...); int main(int argc, char *argv[]); void func_impl(int arg1, int arg2, int arg3, ...) { printf("func() called with argument %d, %d ,%d\n", arg1, arg2, arg3); } int main(int argc, char *argv[]) { //func(1); //error func(1,2); func(1,2,3); func(500, 400); func(700, 200, 400, 700); //can't be error return 0; }