2011-01-10 5 views
2

STDARG.Hは警告している:なぜstdarg.hの最初の引数がレジスタですか?

警告:まずargがレジスタであり、 STDARG.Hはそのアドレス

を取ることができないのはなぜ最初の引数はレジスタに格納されますでしょうか?

+3

あなたの質問は特定の実装についてです。OSとコンパイラを指定してください。 –

+2

これは、ABIに依存します。これは、使用しているCPUファミリとOSによって決まります。 –

+0

stdarg.hは警告を生成しません。あなたのコンパイラは、あなたがコンパイルしたいくつかのコードに基づいています。コードとそのコードをコンパイルするために使用するコマンドラインを投稿してください。 – nos

答えて

2

いくつかの呼び出し規約(fastcallなど)は、最初のいくつかの引数をスタックに置くのではなくレジスタに渡します。しかし、これはこれらの変数のアドレスを取ることを不可能にし、variadic関数のほとんどの実装はこれに依存します。したがって、コンパイラは、引数だけでなくスタックにも引数を配置したり、可変関数に異なる呼び出し規約を使用したりすることがあります。

関連する問題