2

C レベルの可変引数を使用する場合:

void  example( size_t length, ... )
{
    va_list  list;
    T        x;
    va_start( list, length );
    //...
    x = va_arg( list, T );
    //...
    va_end( list );
}

一部の型は、" " を通過したときに変更され...ます。たとえば、 aは にfloatなりますdouble。がそのようなタイプの場合T、元のタイプまたは壊れたタイプを に入れるべきva_argですか?

C と C++ および/または標準のリビジョンで回答が異なる場合は、それを示してください。

(ここをざっと見てみると、マングルされた型が使用されることになっていることがわかります。そうでないことを願っています。ユーザーが型を計算する必要があるため、これは壊れているためです。元の型が型エイリアス、特にエイリアスの背後にある場合、これは面倒です。のような普遍的なオリジナルを持っていないsize_t. うまくいけば、私の投稿のタイトルはより検索可能になります.)

(よく考えてみると、destination 変数はマングルされた型で宣言する必要があることに気付きました。そのため、真であればマングルされた型を で使用することはva_arg、私が思っていたほど愚かではありません。C++11 に甘んじるautoこともあります。)

4

1 に答える 1