详解 c语言可变参数 va_elist和_vsnprintf及printf实现.docVIP

  • 1
  • 0
  • 约1.37万字
  • 约 12页
  • 2017-01-02 发布于湖南
  • 举报

详解 c语言可变参数 va_elist和_vsnprintf及printf实现.doc

C语言的变长参数在平时做开发时很少会在自己设计的接口中用到,但我们最常用的接口printf就是使用的变长参数接口,在感受到printf强大的魅力的同时,是否想挖据一下到底printf是如何实现的呢?这里我们一起来挖掘一下C语言变长参数的奥秘。 先考虑这样一个问题:如果我们不使用C标准库(libc)中提供的Facilities,我们自己是否可以实现拥有变长参数的函数呢?我们不妨试试。 一步一步进入正题,我们先看看固定参数列表函数, void fixed_args_func(int a, double b, char *c) { ??????? printf(a = 0x%p\n, a); ??????? printf(b = 0x%p\n, b); ??????? printf(c = 0x%p\n, c); } 对于固定参数列表的函数,每个参数的名称、类型都是直接可见的,他们的地址也都是可以直接得到的,比如:通过a我们可以得到a的地址,并通过函数原型声明了解到a是int类型的; 通过b我们可以得到b的地址,并通过函数原型声明了解到b是double类型的; 通过c我们可以得到c的地址,并通过函数原型声明了解到c是char*类型的。 但是对于变长参数的函数,我们就没有这么顺利了。还好,按照C标准的说明,支持变长参数的函数在原型声明中,必须有至少一个最左固定参数(这一点与传统C有区

文档评论(0)

1亿VIP精品文档

相关文档