ページ 11

可変長引数

Posted: 2009年4月09日(木) 13:31
by
こんにちは。いつもお世話になっています。
C言語は初心者でテキストを見ながら進めています。

質問があるのですが、va_start(ap, v)は可変長引数を操作する上で必要なデータを取得するマクロとあったのですが、このマクロとはどういう意味でしょうか?

よろしくお願いします。

Re:可変長引数

Posted: 2009年4月09日(木) 13:40
by toyo
#define ~
で定義されたものをマクロといいます。
ちなみにVisualC++2008では

#define va_start _crt_va_start
#define _crt_va_start(ap,v) ( ap = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v) )

と定義されてました。

Re:可変長引数

Posted: 2009年4月09日(木) 14:28
by hss12
マクロは
オブジェクト形式マクロと
関数形式マクロの2種類あります。

オブジェクト形式マクロは

#define MAX 5
for(i=0; i<MAX; i++)

のように使います。
for(i=0; i<5; i++)
に置き換わります。

質問の場合は関数形式マクロですが

/*和を求めるマクロ*/
#define add(x, y) ((x)+(y))
printf("aとbの和は%d", add(a, b));

この場合
printf("aとbの和は%d", ((a)+(b)));
に置き換わります。

Re:可変長引数

Posted: 2009年4月09日(木) 15:44
by
マクロといっても、オブジェクト形式マクロと関数形式マクロがあるのですね。
とても、勉強になりました。
お二方、解答ありがとうございました。