問題タブ [variadic-macros]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Visual C++ で可変引数リストを使用してマクロを作成する方法はありますか?
私の知る限り、gcc では次のように記述できます。
VC++でそれを行う方法はありますか?
c++ - C++ プリプロセッサ __VA_ARGS__ 引数の数
ネットで答えが見つからなかった単純な質問。可変引数マクロで、引数の数を見つける方法は? 解決策があれば、ブーストプリプロセッサで問題ありません。
違いが生じる場合は、可変数のマクロ引数を変換して、さらに再処理するためにプリプロセッサ シーケンス、リスト、または配列をブーストしようとしています。
c++ - 可変個引数マクロへのデフォルト引数の追加
可変引数マクロで可変引数の前にデフォルト引数を追加することは可能ですか? たとえば、次のようなマクロのバージョンがあります
以前のバージョンに影響を与えないように、可変引数の前にマクロにさらに 2 つのデフォルト引数を追加したいと思います。お気に入り:
どんな助けでも大歓迎です。
c++ - マクロ定義の引数の数
テンプレート型のために引数の数が異なるいくつかのテンプレート化された関数があります。この関数はマクロ定義でラップされています。
関数呼び出しに引数を 1 つしか使用していない場合はすべて問題ありませんが、さらに多くの引数が必要です。次のように、さまざまなマクロの定義を通じてそのようなことを行うブーストを調べました。
しかし、このコードはコンパイラー用に移植可能とマークされています。任意の数の引数でいくつかの定義を使用する方法があります。どうやってやるの?
macros - Cプリプロセッサ、マクロ「オーバーロード」
ある種のマクロ「オーバーロード」を実行しようとしているので、MACRO(何か)はMACRO(何か、その他)とは異なる方法で展開されます。
ここから取得したスニペット(100%移植可能かどうかはわかりません)とBoost PPライブラリのいくつかの関数を使用して、それを機能させることができました:D
今、私がやりたい他の2つのことがまだ欠けています。
(これは、解決しなくてもかまいません)「バリアント」とそれに対応する「出力」の数を取得すると、上記のようなコードが生成されるマクロを記述できると思います。上記の例を生成するには、TEMPLATE(3、function_A(...)、function_B(...)、function_C(...))のようなものを使用します。
TEST()が引数なしで呼び出されるとどうなりますか?さて、VA_NARGSは1に展開されます。しかし、最初の引数は ""(何もありません)です。
__VA_ARGS__
この状況に対応するために「オーバーロード」関数を拡張するために、「ゼロ」引数を検出するか、「ヌル」引数と実際の引数を区別する方法を見つけようとしています。何か案は?
c++ - 引数がゼロでコンマが含まれる可変個引数マクロ
このマクロについて考えてみましょう。
引数がゼロの場合、コンパイラはコンマの後に識別子を期待するため、不正なコードが生成されます。実際、VCのプリプロセッサはコンマを削除するのに十分賢いですが、GCCはそうではありません。マクロはオーバーロードできないため、次のように、この特殊なケースで正しく処理するには別のマクロが必要になるようです。
2番目のマクロを導入せずに動作させる方法はありますか?
c - 末尾ではなく中央に__VA_ARGSを使用して可変個引数Cプリプロセッサマクロを定義できますか?
私がこれを行うと、GCCは文句を言います:
これらの2つの理由を教えてください:
どうやら、C99スタイルの可変個引数マクロは省略記号の直後に閉じ括弧を期待しており、可変個引数リストがマクロの最後の引数であることを事実上要求しています。上記のマクロで説明した省略表記を作成するには、中央に配置する必要があります。GCCは、別の(C99以外の)可変個引数マクロスタイルを使用して、この機能をサポートしていますか?他の方法でそれをエミュレートできますか?最後に可変個引数リストは必要ありません。表記が混乱します。そして、私はGCCしか使用できません。
c - __VA_ARGS__ への追加
私はこれができることを知っています:
これは単なる例であり、より複雑なソリューションの一部です。ポイントは、可変数の引数を最初の 123 に追加する必要があるということです。引数が MACRO に渡されない場合、## により、コンパイラは 123 引数の後のコンマを削除します。
しかし、次のように引数を api に追加したいと思います。
ノカンド。1 つの解決策は、たとえば MACRO と MACRO_V という 2 つのマクロを用意し、_V バージョンでは引数を処理しないようにすることです。しかし、1 つのマクロで動作させる方法はありますか?
c - C の可変個引数マクロの問題
Cの #define ステートメント、またはより具体的には gcc 4.2 のオプションの引数に問題があります。
これは明らかに不自然な例ですが、問題を示しています。オプションの引数を正しく「解決」する方法を知っている人はいますか?
追加情報: ##
beforeを削除して、次の__VA_ARGS__
ようにすると:
それはコンパイルされますが、解決されるため、引数がゼロでは機能しなくなりましたfunc(tmp, )
編集:すべてのコードを変換して、以前のコードの代わりに P99 に依存するようにした直後 (これにより、コードが大幅に壊れてしまいました)、誤ってこれが機能することを発見しました:
任意の数のパラメーターをコンパイルして動作します (そして正しい値が渡されて返されます)、しかし...これは合法であると考えられますか?