[C/C++]函数可变参数表
2015-10-04 20:38
190 查看
以前看《C++ Primer》就看到过函数的可变参数列表,但是书中只是一带而过,具体用法没有介绍。现在把“圣经”看了一遍,以前的很多疑问都烟消云散。
可变参数的使用主要用到标准头文件<stdarg.h>中定义一组宏定义,它们对如何遍历参数表进行了定义。其中:va_list类型声明一个变量(如ap),该变量将依次引用各参数。va_start将ap初始化为指向第一个无名参数的指针。每次调用va_arg,该函数都将返回一个参数,并将ap指向下一个参数。最后调用va_end,完成必要的清理工作.
下面是用可变参数表实现的简化的printf函数,代码如下:
可变参数的使用主要用到标准头文件<stdarg.h>中定义一组宏定义,它们对如何遍历参数表进行了定义。其中:va_list类型声明一个变量(如ap),该变量将依次引用各参数。va_start将ap初始化为指向第一个无名参数的指针。每次调用va_arg,该函数都将返回一个参数,并将ap指向下一个参数。最后调用va_end,完成必要的清理工作.
下面是用可变参数表实现的简化的printf函数,代码如下:
#include <stdarg.h> void minprintf(char *fmt, ...){ va_list ap; char *p, *sval; int ival; double dval; va_start(ap, fmt); for (p = fmt; *p; p++) { if (*p != '%') { putchar(*p); continue; } switch (*++p) { case 'd': ival = va_arg(ap, int); printf("%d", ival); break; case 'f': dval = va_arg(ap, double); printf("%f", dval); break; case 's': for (sval = va_arg(ap, char *); *sval; sval++) putchar(*sval); break; default: putchar(*p); break; } } va_end(ap); }
相关文章推荐
- 条款5.了解c++默默编写并且调用了哪些函数。
- C语言函数指针变量
- C++缺省参数和函数重载
- C++ assert()的用法
- 什么是EOF ,如何输入EOF
- emacs 24.4.1 终极 C++智能提示解决方案
- C++学习笔记5——类的继承
- 条款1:将c++视作一个语言联邦
- C++基础编程----2.3标准库类型vector
- C++输出格式控制
- C++学习(二)-虚基类(2)
- 【C++】c++单继承、多继承、菱形继承内存布局(虚函数表结构)
- c++类的特性探究(一)
- 关于C语言的EOF
- 黑马程序员—OC语言的self关键字和super关键字
- C++引用
- C++ Primer Plus 课后习题 第四章
- C++ map容器 按照value值排序
- AVL树的思想与C++实现
- emacs 24.4.1 使用company mode智能提示C++程序