問題タブ [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 投票する
1 に答える
399 参照

c++ - ネストされたマクロの結果を連結する

次の一連のマクロがあります。

ここで、前のものに評価される別の汎用マクロを作成したいと思います。次のようにしようとしています。

その背後にある考え方はBOOST_PP_VARIADIC_SIZE(__VA_ARGS__)、正しい数のパラメーターに評価され、それが正しいマクロに変わるというものです。

BOOST_PP_VARIADIC_SIZE()しかし、残念ながら、が に連結された後に が評価さmacro_れ、不要なコードが発生することがわかりましたmacro_BOOST_PP_VARIADIC_SIZE

BOOST_PP_VARIADIC_SIZE最初に評価してから連結できる方法はありmacro_ますか?

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

c - __VA_ARGS__ を使用してマクロから関数を呼び出すと、「vsprintf」が動かなくなるのはなぜですか?

次のマクロがあります。

関数TR_Traceは次のようになります。

そして、私はそれを次のように使用しています:

ここでの問題は、実行がvsprintf(tempString, string, aptr); に達するとです。そこに引っかかる。

何が起こっているのか、またはVA_ARGSを正しく使用していない場合、誰かが知っていますか?

よろしく。

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

c++ - 可変引数を持つ C++ マクロ

1.#define debug(...) printf( __VA_ARGS__)

2.#define debug(...) std::cout<< __VA_ARGS__

明らかに、1 は問題ありませんが、2 はコンパイル時にエラーが発生します。可変引数で「std::cout」を使用する可能性はありますか?

このマクロのポイントは何ですか?

「debug」マクロは、コードをデバッグするために何かを出力するために使用します。

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

c - コンマを含むパラメーターを文字列化する際のビジュアル C++ と gcc/clang の動作の違い

文字列化演算子を使用して、マクロに渡されたコンマを含む可能性のあるパラメーターを文字列に変換しています。私が知っているように、一部の文字は文字列化できません。特に、コンマ (,) はパラメーターを区切るために使用され、右括弧 ()) はパラメーターの終わりを示すために使用されます。そこで、可変長マクロを使用して、次のようにカンマを文字列化演算子に渡します。

それは正常に動作します。しかし、可変引数マクロがないとどうなるかが思い浮かんだので、マクロを変更します: #define MAKE_STRING(x) #x. これは、Visual C++ 2008/2010 で予期せず正常にコンパイルされ、10, 20gcc/clang が期待どおりにコンパイル エラーを出力している間に出力されます。

マクロ "MAKE_STRING" は 2 つの引数を渡しましたが、1 つしか取りません

だから私の質問: Visual c++ は追加の作業を行っていますか、それとも動作は未定義ですか?

0 投票する
4 に答える
2103 参照

c++ - 可変引数 (2 つ以上のパラメーター) を取ることができる max または min マクロを実装できますか?

たとえば、2 つ以上のパラメーターを取ることができる新しい最大/最小マクロを実装したいと考えています。

そして、次のように使用できます。

このマクロがそのマクロの実装に役立つか?

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

c++ - 可変長マクロをアンパックするためのトリックはありますか?

可変個引数マクロをアンパックするトリックはありますか? 例えば、

#define READ(...)引数を1つずつ読み取ることを意味します

READ(a, b, c)に解凍されますread(a); read(b); read(c)

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

c - VC++6.0 で可変個引数マクロを模倣するには?

VS2010では、情報をファイルにダンプするために次の可変長マクロを作成しました。

これらのマクロは、私のプログラムで頻繁に発生します。

悲しいことに、コードをアンティルビアン IDE のVC++6.0に移行する必要がありますが、これは可変個引数マクロをサポートしていません。代わりに可変個引数関数を書きました。

しかし、数百行ではないにしても数十行のコードを から に変更する必要がありIND_FP(format, ...)ますIND_FP(fp, indent, format, ...)

私を助けることができるマクロのトリックはありますか? それとも、明示的な引数を使用して冗長性に慣れた方がよいでしょうか?