2017-12-07 12 views
1

タイプをva_argに返すことはできますか? 私が知っているようのva_argができません読み取りリターンチャー/ショートINTタイプキャストタイプをva_argに返す

if (flags->size == 0) 
    u->s = (char)va_arg(pt, int); 
if (flags->size == 1) 
    u->s = (short int)va_arg(pt, int); 

答えて

1

規格が指定する

指定された型の値を持つ式にva_argマクロ膨張しコールの次の引数。

C2011 7.16.1.1/2

ような発現は、マクロの展開に起因するという事実は、それがどのように使用できるかには関係ありません。特に、va_argに指定された型がintである場合、結果のint型式は、va_arg()の振る舞いが定義されていれば、確かに他の整数型にキャストできます(実際には引数の昇格型と互換性があります)。

だから、va_arg()の結果をキャストすることができます。ドキュメントから

0

va_argは現在の引数

は、だからあなたの場合には、それはptintように指しているものの値を返します。だから、あなたはその価値をキャストすることができます。

関連する問題