概述
C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;
即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题
var_list可变参数介绍
VA_LIST 是在C语言中解决变参问题的一组宏,原型:
其实就是个char*类型变量
除了 ,我们还需要几个宏来实现可变参数
「va_start、va_arg、va_end」
简单使用可变参数
啊这..
可变参数原理
在进程中,堆栈地址是从高到低分配的.当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,堆栈地址不断递减,
「黑客就是在堆栈中修改函数返回地址,执行自己的代码来达到执行自己插入的代码段的目的」.
函数在堆栈中的分布情况是:地址从高到低,依次是:函数参数列表,函数返回地址,函数执行代码段.
说这么多直接上代码演示吧..
输出:
「这个是为了介绍简单化,所以举的例子」
这样有点不大方便只能获取两个参数的,用可变参数改变一下
输出
当你理解之后你就会说就这?这么简单,指定第一个参数是后面参数的总数就可以了,这还不随随便玩
别着急,精彩的来了,「可变参数的应用」
可变参数应用:实现log打印
输出
这个使用示例精妙之处在于注册一个指定的回调函数
然后在发送的时候根据判断是否执行回调函数,顺便格式化信息
-- End --
领取专属 10元无门槛券
私享最新 技术干货