C言語の関数形式マクロでは、引数の省略も可能です。
その場合、マクロ呼び出しでの実引数の数は、マクロ定義内の省略記号(...)を除く仮引数の数よりも
多くなければなりません。
識別子__VA_ARGS__が省略された引数を表します。__VA_ARGS__は、仮引数に省略記号を用いる関数形式マクロの置換要素並びの中だけで使用可能です。
例:
/*
ex_define_va.c
*/
#include <stdio.h> /* printf */
#include <stdlib.h> /* EXIT_SUCCESS */
#define DBG(...) (fprintf(stderr, __VA_ARGS__))
int main(int argc, char *argv[])
{
int x = 100;
DBG(”x:%dn”, x);
return EXIT_SUCCESS;
}
その場合、マクロ呼び出しでの実引数の数は、マクロ定義内の省略記号(...)を除く仮引数の数よりも
多くなければなりません。
識別子__VA_ARGS__が省略された引数を表します。__VA_ARGS__は、仮引数に省略記号を用いる関数形式マクロの置換要素並びの中だけで使用可能です。
例:
/*
ex_define_va.c
*/
#include <stdio.h> /* printf */
#include <stdlib.h> /* EXIT_SUCCESS */
#define DBG(...) (fprintf(stderr, __VA_ARGS__))
int main(int argc, char *argv[])
{
int x = 100;
DBG(”x:%dn”, x);
return EXIT_SUCCESS;
}