C99で疑似デフォルト引数

可変長引数マクロと可変長引数関数を組みあわせて引数の最後の1つにデフォルト値を与えることができる。


qnighy's
gist: 189476 — Gist

//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;
}