K's Diary


このページは、たわいのない日々のウワゴトを綴るページです。
なんてツマラナソウナページなんだ(笑)

一応、内容毎にタイトルの色を変えています。
緑色はlinuxに関する話題、 黄色はコンピュータゲームに関する話題、 水色はその他の話題になっています。
なお、スタイルシートに対応していないブラウザでは、 色は変わりませんのであしからず。


過去の日記

全てのトピックを表示


'10/6/3

■ C++ 参照渡しの後の可変長引数

VisualC++2008ExpressionEditionで、以下のような

#include <iostream>
#include <stdarg.h>

void hoge(const int &a, ...)
{
  va_list arg;
  va_start(arg, a);
  int n = va_arg(arg, int);
  while (n >= 0) {
    std::cout << n << std::endl;
    n = va_arg(arg, int);
  }
  va_end(arg);
}

hoge(1,2,3,4,5,6,-1);

プログラムを書いても、思うように動いてくれない。
(2,3,4,5,6」と出力するはずが、何も出ない)
どうも、参照渡しの引数の後の可変長引数の関数を作ると、おかしいようだ。

何か情報はないものか、とgoogle先生に尋ねたら、ようやっと一件だけ見つかった。
http://pg-torch-ic.jugem.jp/?cid=1

ただ、「x86系プロセッサでは」と言っているけど、自分が調べたところでは、 cygwinのg++(3.4.4、4.3.4)、ubuntu10.04-i686のg++(4.4.3)、あと、 詳しくは言えないけど某ターゲット(x86系じゃないけど)のCodeWarriorだと、 ちゃんと動いてくれるんだよなぁ。
VisualC++だけなんじゃ(笑)
それとも、コード自体に問題があるのかなぁ。