2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Amazonウィジェット

  • miniPC
  • 最近買った本
  • Raspberry Pi
  • クアッドコプター
  • 書籍ランキング

AdSense

  • 広告
無料ブログはココログ

« C言語で文字列を読むときのノウハウ | トップページ | C言語 sscanfの続きとvsscanfとの違い。それぞれの使いどころ »

2016年10月 9日 (日)

C言語 可変長引数の使いかた

いままで注目していなかったが、vsscanfのついでに使えるようになっておこうと色々試しました。下記にメモを記します。


最初にva_startを呼び、どこからが可変長になっているかを知らせ、va_list型の変数に受け取らせる。上の例で行くと、関数argtameの引数はint nと...の可変長引数。

va_start(argv,n)


ということは、引数nの次から可変長引数ということを処理系に教えている。あとはva_argを呼び出すことで順番に受け取った引数が出てくる。最後にva_endを呼んで終了。

とりあえず動きを見たいので、for文を使わずに一個ずつargvが取り出される様子を見ることにした。


#include 

#include

void argtame(int n, ...){ va_list argv; va_start(argv, n); int a; a = va_arg(argv, int); printf("%d\n", a); a = va_arg(argv, int); printf("%d\n", a); va_end(argv); } void main(void){ argtame(2, 3, 4); }

もとのva_argを壊したくない場合は、一旦va_copyでコピーを作ってからやればよいとのこと。

va_copyの使い方の例(別HP)

« C言語で文字列を読むときのノウハウ | トップページ | C言語 sscanfの続きとvsscanfとの違い。それぞれの使いどころ »

C言語」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/518723/64289488

この記事へのトラックバック一覧です: C言語 可変長引数の使いかた:

« C言語で文字列を読むときのノウハウ | トップページ | C言語 sscanfの続きとvsscanfとの違い。それぞれの使いどころ »