「C言語の基礎 - 可変長引数」の版間の差分

ナビゲーションに移動 検索に移動
文字列「<source lang」を「<syntaxhighlight lang」に置換
編集の要約なし
(文字列「<source lang」を「<syntaxhighlight lang」に置換)
24行目: 24行目:


== サンプルコード ==
== サンプルコード ==
  <source lang="c">
  <syntaxhighlight lang="c">
  #include <stdarg.h>
  #include <stdarg.h>
   
   
58行目: 58行目:
NULL終端や番兵により、可変長引数の終わりを知らせるテクニックがある。<br>
NULL終端や番兵により、可変長引数の終わりを知らせるテクニックがある。<br>
NULLが出現するまで実引数の取り出し操作と比較処理が繰り返される。<br>
NULLが出現するまで実引数の取り出し操作と比較処理が繰り返される。<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  bool strin(const char *target, const char *args, ...)
  bool strin(const char *target, const char *args, ...)
  {
  {
78行目: 78行目:
  }
  }
  </source>
  </source>
  <source lang="c">
  <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>
  <source lang="c">
  <syntaxhighlight lang="c">
  /* 間違った使用例 */
  /* 間違った使用例 */
  void pf(const char *format, ...)
  void pf(const char *format, ...)
96行目: 96行目:
  </source>
  </source>
<br>
<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  /* 良い使用例 */
  /* 良い使用例 */
  void pf(const char *format, ...)
  void pf(const char *format, ...)
107行目: 107行目:
  </source>
  </source>
<br>
<br>
  <source lang="c">
  <syntaxhighlight lang="c">
  /* 呼び出し側 */
  /* 呼び出し側 */
  pf("%s %d", "Shop", 99); // "Shop 99"
  pf("%s %d", "Shop", 99); // "Shop 99"

案内メニュー