va_list(),va_start(),va_arg(),va_end() 详细解析
下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏:我们在程序中可以这样调用:我们知道va_start,va_arg,va_end是在stdarg.h中被定义成宏的, 由于栈的地址,如图:高地址然后,我们用va_arg()取得类型t的可变参数值,以上例为int型为例,我们看一下va_arg取int型的返回值:高地址最后要说的是va_end宏的意思,x86平台定义为ap=0;使ap不再指向堆栈,而是跟NULL一样.有些直接定义为,这样编译器不会为va_end产生代码,例如gcc在linux的x86平台就是这样定义的.因为va_start, va_arg,va_end等定义成宏,所以它显得很愚蠢,可变参数的类型和个数完全在该函数中由程序代码控制,它并不能智能地识别不同参数的个数和类型.
用户评论