3

次の形式の関数を使用して C++ で作業する方法: void function(...) {}?

少なくとも 1 つの暗黙的なパラメーターが本当に必要ですか?

4

3 に答える 3

1

プラットフォームの独立性を維持したい場合は、少なくとも 1 つのパラメーターが必要で、va_arg マクロを使用します。

アーキテクチャと呼び出し規約の低レベルの詳細を知っている場合は、引数をレジスタやスタックから直接引き出すことができます (さまざまなパラメーターの最終的な場所によって異なります)。

于 2013-08-28T15:51:08.023 に答える
1

va_start「関数」には を設定するための引数が必要であることを考えると、va_list確実かつ移植可能に機能する方法でこれを行うことは不可能だと思います。特定のプラットフォームで動作するものを見つけることは十分に可能かもしれませんが、コンパイラを変更したり、別のプラットフォーム用にコンパイルしたり、場合によっては別のコンパイラ オプションでコンパイルしたり (または関数内のコード (ローカル変数の導入など)。

... 
va_list vl;
va_start(vl, arg);
...

もちろん、他の問題は、引数がない場合を知ることです(これは有効なケースです)。少なくとも 1 つの引数がない場合、引数をまったく渡さないとどうなるでしょうか。これが事実であることをどのように「知る」のですか?

于 2013-08-28T16:00:29.240 に答える