問題タブ [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.

0 投票する
9 に答える
16363 参照

c++ - Visual C++ で可変引数リストを使用してマクロを作成する方法はありますか?

私の知る限り、gcc では次のように記述できます。

VC++でそれを行う方法はありますか?

0 投票する
12 に答える
145917 参照

c++ - C++ プリプロセッサ __VA_ARGS__ 引数の数

ネットで答えが見つからなかった単純な質問。可変引数マクロで、引数の数を見つける方法は? 解決策があれば、ブーストプリプロセッサで問題ありません。

違いが生じる場合は、可変数のマクロ引数を変換して、さらに再処理するためにプリプロセッサ シーケンス、リスト、または配列をブーストしようとしています。

0 投票する
3 に答える
7191 参照

c++ - 可変個引数マクロへのデフォルト引数の追加

可変引数マクロで可変引数の前にデフォルト引数を追加することは可能ですか? たとえば、次のようなマクロのバージョンがあります

以前のバージョンに影響を与えないように、可変引数の前にマクロにさらに 2 つのデフォルト引数を追加したいと思います。お気に入り:

どんな助けでも大歓迎です。

0 投票する
1 に答える
437 参照

c++ - マクロ定義の引数の数

テンプレート型のために引数の数が異なるいくつかのテンプレート化された関数があります。この関数はマクロ定義でラップされています。

関数呼び出しに引数を 1 つしか使用していない場合はすべて問題ありませんが、さらに多くの引数が必要です。次のように、さまざまなマクロの定義を通じてそのようなことを行うブーストを調べました。

しかし、このコードはコンパイラー用に移植可能とマークされています。任意の数の引数でいくつかの定義を使用する方法があります。どうやってやるの?

0 投票する
1 に答える
6231 参照

macros - Cプリプロセッサ、マクロ「オーバーロード」

ある種のマクロ「オーバーロード」を実行しようとしているので、MACRO(何か)はMACRO(何か、その他)とは異なる方法で展開されます。

ここから取得したスニペット(100%移植可能かどうかはわかりません)とBoost PPライブラリのいくつかの関数を使用して、それを機能させることができました:D

今、私がやりたい他の2つのことがまだ欠けています。

  1. (これは、解決しなくてもかまいません)「バリアント」とそれに対応する「出力」の数を取得すると、上記のようなコードが生成されるマクロを記述できると思います。上記の例を生成するには、TEMPLATE(3、function_A(...)、function_B(...)、function_C(...))のようなものを使用します。

  2. TEST()が引数なしで呼び出されるとどうなりますか?さて、VA_NARGSは1に展開されます。しかし、最初の引数は ""(何もありません)です。__VA_ARGS__この状況に対応するために「オーバーロード」関数を拡張するために、「ゼロ」引数を検出するか、「ヌル」引数と実際の引数を区別する方法を見つけようとしています。何か案は?

0 投票する
3 に答える
5526 参照

c++ - 引数がゼロでコンマが含まれる可変個引数マクロ

このマクロについて考えてみましょう。

引数がゼロの場合、コンパイラはコンマの後に識別子を期待するため、不正なコードが生成されます。実際、VCのプリプロセッサはコンマを削除するのに十分賢いですが、GCCはそうではありません。マクロはオーバーロードできないため、次のように、この特殊なケースで正しく処理するには別のマクロが必要になるようです。

2番目のマクロを導入せずに動作させる方法はありますか?

0 投票する
3 に答える
1876 参照

c - C でのトークンの貼り付け

VA_NARGについて読んだ後

Cでマクロを使って引数の数に応じて関数のオーバーロードを実装しようとしました。問題は次のとおりです。

これは C-faq から読みました。しかし、まだそれを機能させることができませんでした...

0 投票する
2 に答える
12631 参照

c - 末尾ではなく中央に__VA_ARGSを使用して可変個引数Cプリプロセッサマクロを定義できますか?

私がこれを行うと、GCCは文句を言います:

これらの2つの理由を教えてください:

どうやら、C99スタイルの可変個引数マクロは省略記号の直後に閉じ括弧を期待しており、可変個引数リストがマクロの最後の引数であることを事実上要求しています。上記のマクロで説明した省略表記を作成するには、中央に配置する必要があります。GCCは、別の(C99以外の)可変個引数マクロスタイルを使用して、この機能をサポートしていますか?他の方法でそれをエミュレートできますか?最後に可変個引数リストは必要ありません。表記が混乱します。そして、私はGCCしか使用できません。

0 投票する
3 に答える
9332 参照

c - __VA_ARGS__ への追加

私はこれができることを知っています:

これは単なる例であり、より複雑なソリューションの一部です。ポイントは、可変数の引数を最初の 123 に追加する必要があるということです。引数が MACRO に渡されない場合、## により、コンパイラは 123 引数の後のコンマを削除します。

しかし、次のように引数を api に追加したいと思います。

ノカンド。1 つの解決策は、たとえば MACRO と MACRO_V という 2 つのマクロを用意し、_V バージョンでは引数を処理しないようにすることです。しかし、1 つのマクロで動作させる方法はありますか?

0 投票する
3 に答える
2343 参照

c - C の可変個引数マクロの問題

Cの #define ステートメント、またはより具体的には gcc 4.2 のオプションの引数に問題があります。

これは明らかに不自然な例ですが、問題を示しています。オプションの引数を正しく「解決」する方法を知っている人はいますか?


追加情報: ##beforeを削除して、次の__VA_ARGS__ようにすると:

それはコンパイルされますが、解決されるため、引数がゼロでは機能しなくなりましたfunc(tmp, )

編集:すべてのコードを変換して、以前のコードの代わりに P99 に依存するようにした直後 (これにより、コードが大幅に壊れてしまいました)、誤ってこれが機能することを発見しました:

任意の数のパラメーターをコンパイルして動作します (そして正しい値が渡されて返されます)、しかし...これは合法であると考えられますか?