代码中经常会看到va_start、va_arg以及va_end这样奇怪的东东,查看定义原来都是宏定义,许多人不知道这个是干什么的,其实这个是用于实现可变参数的函数。有时候我们自己也需要写一个可变参数的函数来方便使用。理解可变参数的实现原理的核心是理解函数参数的入栈方式,如果你理解了本文前面的内容,实际你就基本掌握了可变参数的函数原理,可能你自己还不知道,呵呵。以下内容copy网上的一篇介绍“C中的可变参数研究”(原作者和出处一时不记得了,请原作者见谅,并致谢,当初是看这篇文章才明白的),我基本没修改,因为它描述得已经很好了,看完你就明白了。
标题:C中的可变参数研究
(1)何谓可变参数
这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用”…”表示)。而我们又可以用各种方式来调用printf,如:
(2)实现原理
C语言用宏来处理这些可变参数。这些宏看起来很复杂,其实原理挺简单,就是根据参数入栈的特点从最靠近第一个可变参数的固定参数开始,依次获取每个可变参数的地址。下面我们来分析这些宏。在VC中的stdarg.h头文件中,针对不同平台有不同的宏定义,我们选取X86平台下的宏定义:…
最新评论