C++可变参数宏
来源:互联网 发布:2016年十大网络用语 编辑:程序博客网 时间:2024/06/16 15:18
0、如下为一个小例子
#define F(...) printf(__VA_ARGS__) F("hello\n"); F("count = %d\n", ONE);
1、一个更加丰富的栗子:
//此处仅作示例,参数数量略少#define LOG(...) Log(#__VA_ARGS__,__VA_ARGS__) //实现部分//参数str接收的是__VA_ARGS__可变参数拼接成的字符串void Log(std::string str,...){ //定义要存放可变参数的列表 ap va_list ap; //初始化可变参数列表的存储地址(可讨论) va_start(ap, str); //初次开辟空间大小 int nLen = MAX_LINE_LENGTH; char *buf = (char *)malloc(nLen); //接收可变参数中的第一个参数,这里,我们假定是一个字符类型的 //(需要事先知道类型,否则按照字符接收,可能出现显示异常) //这里我们接收的第一个参数是一个流格式fmt,形如%s%d%c const char * fmt = va_arg(ap, const char*); int nSize = 0; //使用vsnprintf可以很好的避免buf空间不足,出现内存溢出 //按照第一个参数规定的格式,将后续所有的参数一次性接受到buf中 //ps:如果不想这样接收,大可以使用接收第一个参数时的方式(va_arg),接收剩下的参数, //需要注意的是,必须知道所有参数的类型,和总的参数个数(这时, //大家一般选择用第一个参数表示后续的参数个数,再使用一个循环,按照事先约定的数据类型依次接收剩下的数据) while(nSize = vsnprintf(buf, nLen, fmt, ap) < 0) { nLen*=2; //当nSize<0代表空间不足,我们重新为buf开辟一个更大的空间。 buf = (char *)realloc(buf, nLen); } str = buf;}
参考:
百度百科-vsnprintf
阅读全文
1 0
- C可变参数宏
- C宏 可变参数
- 可变参数宏.c
- C 可变参数宏
- C语言可变参数宏
- C/C++可变参数宏
- C语言 可变参数宏
- c语言可变参数宏
- <C++> 可变参数宏定义
- C 参数可变宏使用
- C 语言中的可变参数宏
- C宏的一个技巧:可变参数
- 《c和指针》--宏可变参数
- C语言中可变参数宏
- C/C++宏定义的可变参数
- C++(四)define 可变参数宏
- c 语言中的宏,井号,可变参数
- C/C++宏定义的可变参数
- 不可变的String类
- filebeat源码分析之采集
- EOJ #3441 唐纳德与子串 (Easy)【KMP】
- 二分法插入paix
- Implement PatternToNumber
- C++可变参数宏
- 定义一个平面中的circle类
- 关于EasyRTSPClient、EasyPlayer RTSP流重连问题的解释
- Python基础之数据结构(元组,列表,字典)
- Eclipse快捷键 10个最有用的快捷键
- 实验二
- linux安装redis
- Python函数参数总结(位置参数、默认参数、可变参数、关键字参数和命名关键字参数)
- hive执行报错:Both left and right aliases encountered in JOIN 's1'