Overloading Macro on Number of Argumentsなぜ私のvariadicマクロは引数を正しく受け入れないでしょうか?
https://codecraft.co/2014/11/25/variadic-macros-tricks/
私は仕事に以下のコードを取得しようと、上記二つのリンクで見てきた:
#define _GET_NUMBER(_0, _1, _2, _3, _4, _5, NAME, ...) NAME
#define OUTPUT_ARGS_COUNT(...) _GET_NUMBER(_0, ##__VA_ARGS__, 5, 4, 3, 2, 1, 0)
...
cout << OUTPUT_ARGS_COUNT("HelloWorld", 1.2) << endl;
cout << OUTPUT_ARGS_COUNT("HelloWorld") << endl;
cout << OUTPUT_ARGS_COUNT() << endl;
これは、コンパイル実行され、次のような出力が得られます。
2
1
1
なぜ私はOUTPUT_ARGS_COUNT()を呼び出すのか理解できません私は使用しようとしているコードをよく理解していますが、まだギリシャ語です。文字通りコピーしたにもかかわらず、何かを正しく適用していない可能性がありますスタックオーバーフロー時にリンクからサンプルコードを貼り付けました。あなたがに私を指すことができ
私はグラムを使用してコンパイルしてい++ 5.4.0 20160609.
任意のアイデアや追加のリソースをいただければ幸いです。あなたはhttp://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.htmlで見ることができます
http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.htmlで見ることができます:* "上記の説明は、唯一のマクロパラメータが可変引数パラメータである場合についてあいまいです何も引数が空の引数か不足している引数かどうかを区別しようとするのは無意味ですCPPは特定のC標準に準拠しているときはカンマを保持し、それ以外の場合は標準への拡張として取り除かれます。 – Jarod42
これをチェックしてくださいhttps://stackoverflow.com/questions/2308243/macro-returning-the-number-of-arguments-it-is-given-in-c、解決策はゼロ引数でも失敗します –