C语言中可变参数的原理是什么
导读:本文共3365字符,通常情况下阅读需要11分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: var_list可变参数介绍VA_LIST 是在C语言中解决变参问题的一组宏,原型:typedefchar*va_list;其实就是个char*类型变量除了var_list ,我们还需要几个宏来实现可变参数「va_start、va_arg、va_end」#define_INTSIZEOF(n)((sizeof(n)+sizeof(int)-1)&~(si... ...
目录
(为您整理了一些要点),点击可以直达。var_list可变参数介绍
VA_LIST 是在C语言中解决变参问题的一组宏,原型:
其实就是个char*类型变量
除了var_list ,我们还需要几个宏来实现可变参数
「va_start、va_arg、va_end」
简单使用可变参数
啊这..
可变参数原理
在进程中,堆栈地址是从高到低分配的.当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,堆栈地址不断递减,
「黑客就是在堆栈中修改函数返回地址,执行自己的代码来达到执行自己插入的代码段的目的」.
函数在堆栈中的分布情况是:地址从高到低,依次是:函数参数列表,函数返回地址,函数执行代码段.
说这么多直接上代码演示吧..
输出:
「这个是为了介绍简单化,所以举的例子」
这样有点不大方便只能获取两个参数的,用可变参数改变一下
输出
当你理解之后你就会说就这?这么简单,指定第一个参数是后面参数的总数就可以了,这还不随随便玩
别着急,精彩的来了,「可变参数的应用」
可变参数应用:实现log打印
输出
这个使用示例精妙之处在于注册一个指定level的回调函数makeCallbackData(formattedLogCallback, "context", LIBVLC_WARNING);
C语言中可变参数的原理是什么的详细内容,希望对您有所帮助,信息来源于网络。