printf函数的实现

【日积月累】C/C++可变参数函数的实现

社会主义新天地 提交于 2019-12-12 12:52:33
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1 、可变参函数的原理 C / C++函数的参数是存放在栈区的,并且参数的入栈是从参数的右边开始,即最后一个参数先入栈,而第一个参数最后才入栈,所以,根据栈的后进先出性质,函数总能找到第一个参数。所以,可变参函数的实现必须能够从已知参数中获取到函数所需要参数的个数; 例如printf函数,第一个参数就是一个格式串,而后面所需要的参数个数能够从格式串中得到。 2 、可变参函数的设计 标准头文件s tdar g .h 提供了一套对可变参函数的实现机制,所以编写可变参函数需要包含该头文件。 # include <stdarg.h> C 中变长实参头文件 stdarg.h 提供了一个数据类型 va-list 和三个宏( va-start 、 va-arg 和 va-end ),用它们在被调用函数不知道参数个数和类型时对可变参数表进行测试,从而为访问可变参数提供了方便且有效的方法。 va-list 是一个 char 类型的指针,当被调用函数使用一个可变参数时,它声明一个类型为 va-list 的变量,该变量用来指向 va-arg 和 va-end 所需信息的位置。 VC++中va_list、va_start、va_arg、va_end的细节: va_list: typedef char * va_list; va