C/C++可变参数宏, 编译期获取宏的可变参数长度
来源:互联网 发布:lol淘宝权在哪里直播 编辑:程序博客网 时间:2024/05/16 08:52
C/C++ 可变参数宏, 编译器展开获取可变参数的长度.
参考https://groups.google.com/forum/#!forum/comp.std.c/d-6Mj5Lko_s
同时参考了cppformat源码
#define MARCO_EXPAND(...) __VA_ARGS__#define RSEQ_N() 10,9,8,7,6,5,4,3,2,1,0#define ARG_N(_1,_2,_3,_4,_5,_6,_7,_8,_9_10,N) N#define GET_ARG_COUNT_INNER(...) MARCO_EXPAND(ARG_N(__VA_ARGS__))#define GET_ARG_COUNT(...) GET_ARG_COUNT_INNER(__VA_ARGS__, RSEQ_N())
以上代码片对计算10个参数以内的数量的参数个数, 具体原理如下:
其中如下的宏展开之后就是一个串参数序列:GET_ARG_COUNT(a, b, c) MARCO_EXPAND(ARG_N(a, b, c, 10,9,8,7,6,5,4,3,2,1,0))而通过ARG_N(...) a, b, c, 10,9,8,7,6,5,4,3,2,1,0这个宏展开之后可以理解为是一个反向的下标, 取出具体位置的数字即是最终的数值.需要说明下:RSEQ_N()宏中定义的数字, 跟ARG_N(...)宏中定义的数字代表的参数个数一定是相等的, 通俗一点理解起来:就是将数据列的反向序排列然后通过插入参数之后取互补位置的下标即可.
0 0
- C/C++可变参数宏, 编译期获取宏的可变参数长度
- C可变参数宏
- C宏 可变参数
- 可变参数宏.c
- C 可变参数宏
- C的可变参数
- C 的可变参数
- C语言可变参数宏
- C/C++可变参数宏
- C语言 可变参数宏
- c语言可变参数宏
- <C++> 可变参数宏定义
- C 参数可变宏使用
- C宏的一个技巧:可变参数
- C/C++宏定义的可变参数
- C/C++宏定义的可变参数
- C/C++宏定义的可变参数
- C/C++宏定义的可变参数
- HFSS画图中的sweep功能
- 双向队列
- bzoj1407(扩欧)
- 分享到微信微博空间等第三方平台的JS代码
- 关于cocos2d中的世界坐标与局部坐标
- C/C++可变参数宏, 编译期获取宏的可变参数长度
- insert into 的加强版replace into和 insert ignore into
- 在Java代码中控制视图样式是一个相当不合理的选择
- 3.1 mxc_v4l2_capture.c分析---probe函数分析
- ListView和CheckBox的混乱问题
- canvas.drawArc 起始角度
- error while crawling /home/$USER: boost::filesystem::status: Permission denied: “/home$USER/.gvfs”
- C++析构函数
- OJ中------兄弟单词