C++不确定参数个数函数调用
2016-07-22 14:40
597 查看
INTSIZEOF 宏,获取类型占用的空间长度,最小占用长度为int的整数倍: #define _INTSIZEOF(n) ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) ) VA_START宏,获取可变参数列表的第一个参数的地址(ap是类型为va_list的指针,v是可变参数最左边的参数): #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) VA_ARG宏,获取可变参数的当前参数,返回指定类型并将指针指向下一参数(t参数描述了当前参数的类型): #define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) VA_END宏,清空va_list可变参数列表: #define va_end(ap) ( ap = (va_list)0 )
#include <iostream> #include <stdarg.h> using namespace std; int max(int num, ...) { int ret = -0x7fffffff; va_list parm_p; va_start(parm_p, num); for(int i = 0; i < num; ++ i) { int tmp = va_arg(parm_p, int); if(tmp > ret) { ret = tmp; } } va_end(parm_p); return ret; } int main() { int n = max(6, 3, 5, 7, -1, 10, 2); cout << "max = " << n << endl; return 0; }
相关文章推荐
- Leetcode 101. Symmetric Tree (Easy) (cpp)
- c++中pow 与sqrt函数使用指南
- 数组中第K大的数
- max函数|C++返回数组中的最大值——max_element函数
- c++ string 末尾追加char字符
- C语言输出PI和正弦函数和余弦函数
- C++ ABI之名字改编(以Qt为例)
- C++ ABI之名字改编(以Qt为例)
- C++学习笔记——string型 到 int,double,float型的相互转换:ostringsream,istringstream,stringstream
- c语言中结构体的使用
- C++常见问题: 字符串分割函数 split
- Eclispe 阅读C++代码
- protobuf C++入门
- Cpp环境 【poj 2940 】【Uva11054】【Vijos2909】Wine Trading in Gergovia 格尔高维亚的肮脏红酒交易
- C++中嵌入python程序——使用API接口,从函数到类
- C++学习之路(2) C++输入输出 new delete操作符 函数重载
- C++之离港篇学习笔记之内存管理
- POJ 1862 Stripies(G++与C++的抉择)
- poj2531 Network Saboteur
- C++主要特性/优势