複数の引数を受け入れるマクロを使用するとき、特に引数にカンマが含まれている場合に問題が発生することがあります。次の例を考えてみましょう。
#define FOO(type, name) type name
次のような引数を指定してマクロを使用するのは簡単ですが、
FOO(int, int_var);
のようなコンマを含む複雑な引数を扱う場合には問題が発生します。 >
FOO(std::map<int, int>, map_var); // Error: 3 arguments passed to macro 'FOO', which takes only 2
typedef std::map<int, int> map_int_int_t; FOO(map_int_int_t, map_var); // Compiles successfully
#define COMMA ,
FOO(std::map<int COMMA int>, map_var);
#include <cstdio> #include <map> #include <typeinfo> #define STRV(...) #__VA_ARGS__ #define COMMA , #define FOO(type, bar) bar(STRV(type) \ " has typeid name \"%s\"", typeid(type).name()) int main() { FOO(std::map<int COMMA int>, std::printf); }
以上がC/C のマクロ引数でカンマを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。