首页 > 后端开发 > C++ > 如何处理 C/C 中宏参数中的逗号?

如何处理 C/C 中宏参数中的逗号?

Linda Hamilton
发布: 2024-12-17 06:29:25
原创
910 人浏览过

How Can I Handle Commas in Macro Arguments in C/C  ?

C/C 中宏内的逗号

使用接受多个参数的宏时可能会遇到困难,特别是当参数包含逗号时。考虑以下示例:

#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
登录后复制

但是,这种方法缺乏人体工程学,并且需要额外的类型转换。

另一种解决方案是定义一个名为 COMMA 的宏:

#define COMMA ,
登录后复制

这样定义中,可以使用 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);
}
登录后复制

此代码将输出:“std::map has typeid name "St3mapIiiSt4lessIiESaISt4pairIKiiEEE”。"

以上是如何处理 C/C 中宏参数中的逗号?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板