《C++ primer》学习笔记之二十一:有趣的变参函数
来源:互联网 发布:博客源码资源站 编辑:程序博客网 时间:2024/06/05 17:51
有趣的变参函数:
ascii中用宏:va_list, va_arg, va_start, va_end 四个宏来实现参数变化的函数,估计其原理是:
调用函数时,传入的参数在栈中按(高地址——〉低地址,最后一个参数——〉第一个参数)排列,知道第一个参数的地址,
那么只需要顺序地知道各个参数的类型就可以取出各个参数的值。
例如:
#include <stdarg.h>
void f(int first, int second, ...){ //必须知道至少一个参数。why?为了知道参数的起始地址吗?
cout << "f(" << first;
va_list vaList; //宏va_list
va_start(vaList, second); //宏va_start要以最后一个参数为自己的参数。why?为了知道变参的起始地址吗?
int i = va_arg(vaList, int); //宏va_arg要以类型(比如int)为自己的参数,“返回值”为该类型的值,此即为实际传入的参数
//注意:依次返回second参数后面的参数,不含second。
while ( i != -1 ){
cout << ", " << i;
i = va_arg(vaList, int);
}
va_end(vaList); //宏va_end一般负责将指针vaList=0
cout << ")/n";
}
另:还有一种unix的一套实现方式,也是一组宏,但VC中好像不能用。How do?
- 《C++ primer》学习笔记之二十一:有趣的变参函数
- C++Primer学习笔记之二
- C++primer学习笔记之函数
- 《C Primer Plus》学习笔记之 函数
- 《C++ primer》学习笔记之十一:const的放置位置
- 学习《c++primer》笔记二
- Objective-C学习笔记(二十一)——函数的返回值与参数类型
- 《C Primer Plus》学习笔记之 C数据的属性(二)存储类
- 《C++ primer》学习笔记之二十二: 函数指针
- C Primer Plus 学习笔记系列之(二)
- 《C Primer Plus》 学习笔记系列之(二)
- c++Primer学习笔记之二:c++快速入门_1
- C Primer Plus学习 二十一 指针操作
- C Primer Plus学习 十一 ctype.h系列字符函数
- c语言学习笔记二十一
- MySQL学习笔记之二十一 用户的权限
- 《C++.Primer.Plus》学习笔记(二)
- c++primer学习笔记(二)
- 《C++ primer》学习笔记之十九:奇怪的数组引用
- 如何让window服务进程中自动加载MYSQL服务
- 怎样把progressbar 放到 statusbar 中
- 《C++ primer》学习笔记之二十:引用详解1、2、3
- 在ListView列中插入其他组件
- 《C++ primer》学习笔记之二十一:有趣的变参函数
- 《C++ primer》学习笔记之二十二: 函数指针
- 《C++ primer》学习笔记之二十三: namespace的定义和使用
- FuctionMod.bas
- 《C++ primer》学习笔记之二十四:template function 的定义
- Module.bas
- MainFrm.frm
- 求不大于指定整数的最大素数
- VRSW.vbw