タグ付けされた質問 「variadic-macros」

10
GCCの## __ VA_ARGS__トリックの標準的な代替手段ですか?
C99の可変個引数マクロの空の引数に関するよく知られた 問題があります。 例: #define FOO(...) printf(__VA_ARGS__) #define BAR(fmt, ...) printf(fmt, __VA_ARGS__) FOO("this works fine"); BAR("this breaks!"); BAR()C99標準によれば、上記の使用は実際には正しくありません。 printf("this breaks!",); 末尾のコンマに注意してください-機能しません。 一部のコンパイラー(例:Visual Studio 2010)は、その末尾のコンマを静かに削除します。他のコンパイラ(例:GCC)##は__VA_ARGS__、の前に置くことをサポートしています。 #define BAR(fmt, ...) printf(fmt, ##__VA_ARGS__) しかし、この動作を実現するための標準準拠の方法はありますか?おそらく複数のマクロを使用していますか? 現在、##バージョンはかなりサポートされているようですが(少なくとも私のプラットフォームでは)、実際には標準に準拠したソリューションを使用します。 プリエンプティブ:小さな関数を書くことができることは知っています。マクロを使用してこれを実行しようとしています。 編集:BAR()を使用する理由の例(単純ですが)を次に示します。 #define BAR(fmt, ...) printf(fmt "\n", ##__VA_ARGS__) BAR("here is a log message"); BAR("here is a log message with a …

12
C ++プリプロセッサ__VA_ARGS__引数の数
ネットで答えが見つからなかった簡単な質問。可変個引数マクロで、引数の数を見つける方法は?解決策があれば、ブーストプリプロセッサーで大丈夫です。 それが違いを生む場合、可変数のマクロ引数を変換して、プリプロセッサのシーケンス、リスト、または配列をブーストして、さらに再処理します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.