C语言的变参函数
先提一个问题,什么是变参函数?简单的讲就是一个函数形参的个数不固定。比如我们天天用的printf()
函数就是一个变参函数。像printf("%d",i)
是两个参数,而printf("%d %d",i,j)
是三个参数。那么如何用以及如何写变参函数了,那我们就要从stdrag.h
谈起了。
stdrag.h
头文件
c99标准的7.15章节讲到了stdrag.h
这个头文件,详细内容可以参看标准文档。
这个文件就是和变参函数有关的一个头文件。里面定义了一个类型和四个宏。一个类型是va_list
。四个宏分别是va_start
、va_arg
、va_end
、va_copy
。知道了这四宏一类型的作用,也就学会了怎么编写变参函数。
va_list
变量
当我们用上面提到的四个宏的时候,需要给他们传入va_list
类型的变量。这个变量用来保存宏所修改的值。
va_start
宏
va_start
宏的原型为void va_start(va_list ap, parmN)
。ap就是va_list
定义的变量。而parmN是变参函数最右侧的一个形参(即...
前面的一个形参)。如void testFun(uint8_t numIs