variadic関数はどのように数値定数をどのように扱うのですか?例えばVariadic関数と定数
myfunc(5, 0, 1, 2, 3, 4);
関数は次のようになります。次のコードを考えてみva_arg
で単一の引数を反復処理するためには、
void myfunc(int count, ...)
{
}
今、私は、例えばそのサイズを、知っておく必要がありますint
,short
,char
float
などですが、上記のコードで使用しているような数値定数の場合、どのサイズを仮定しますか?
テストは、ちょうど彼らのためにint
を仮定すると、コンパイラはこれらの定数は、単一char
またはshort
それぞれに表すことができるにもかかわらず、int
としてそれらをプッシュすると思われるので、正常に動作するようですが示されています。
それにもかかわらず、私が見ている動作についての説明を探しています。可変定数に数値定数を渡すCの標準型は何ですか?これは明確に定義されているか、それともコンパイラに依存していますか? 32ビットと64ビットのアーキテクチャに違いはありますか?
ありがとうございます!
答えをありがとう!私はここでフォローアップをちょっとした:http:// stackoverflow。com/questions/40330749/why-does-my-variadic-function-work-both-int-and-long-long – Andreas