13,009
回編集
編集の要約なし |
細 (文字列「<source lang」を「<syntaxhighlight lang」に置換) |
||
24行目: | 24行目: | ||
== サンプルコード == | == サンプルコード == | ||
< | <syntaxhighlight lang="c"> | ||
#include <stdarg.h> | #include <stdarg.h> | ||
58行目: | 58行目: | ||
NULL終端や番兵により、可変長引数の終わりを知らせるテクニックがある。<br> | NULL終端や番兵により、可変長引数の終わりを知らせるテクニックがある。<br> | ||
NULLが出現するまで実引数の取り出し操作と比較処理が繰り返される。<br> | NULLが出現するまで実引数の取り出し操作と比較処理が繰り返される。<br> | ||
< | <syntaxhighlight lang="c"> | ||
bool strin(const char *target, const char *args, ...) | bool strin(const char *target, const char *args, ...) | ||
{ | { | ||
78行目: | 78行目: | ||
} | } | ||
</source> | </source> | ||
< | <syntaxhighlight lang="c"> | ||
/* 使用例 */ | /* 使用例 */ | ||
if (strin("a", "A", "a", NULL)) puts("have"); | if (strin("a", "A", "a", NULL)) puts("have"); | ||
87行目: | 87行目: | ||
問題なく動く場合もあるが、最悪の場合、プログラムがクラッシュする。<br> | 問題なく動く場合もあるが、最悪の場合、プログラムがクラッシュする。<br> | ||
printf関数をラップする場合は、vprintf関数を使用する。<br> | printf関数をラップする場合は、vprintf関数を使用する。<br> | ||
< | <syntaxhighlight lang="c"> | ||
/* 間違った使用例 */ | /* 間違った使用例 */ | ||
void pf(const char *format, ...) | void pf(const char *format, ...) | ||
96行目: | 96行目: | ||
</source> | </source> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="c"> | ||
/* 良い使用例 */ | /* 良い使用例 */ | ||
void pf(const char *format, ...) | void pf(const char *format, ...) | ||
107行目: | 107行目: | ||
</source> | </source> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="c"> | ||
/* 呼び出し側 */ | /* 呼び出し側 */ | ||
pf("%s %d", "Shop", 99); // "Shop 99" | pf("%s %d", "Shop", 99); // "Shop 99" |