首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言可变参数的原理和应用

概述

C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;

即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题

var_list可变参数介绍

VA_LIST 是在C语言中解决变参问题的一组宏,原型:

其实就是个char*类型变量

除了 ,我们还需要几个宏来实现可变参数

「va_start、va_arg、va_end」

简单使用可变参数

啊这..

可变参数原理

在进程中,堆栈地址是从高到低分配的.当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,堆栈地址不断递减,

「黑客就是在堆栈中修改函数返回地址,执行自己的代码来达到执行自己插入的代码段的目的」.

函数在堆栈中的分布情况是:地址从高到低,依次是:函数参数列表,函数返回地址,函数执行代码段.

说这么多直接上代码演示吧..

输出:

「这个是为了介绍简单化,所以举的例子」

这样有点不大方便只能获取两个参数的,用可变参数改变一下

输出

当你理解之后你就会说就这?这么简单,指定第一个参数是后面参数的总数就可以了,这还不随随便玩

别着急,精彩的来了,「可变参数的应用」

可变参数应用:实现log打印

输出

这个使用示例精妙之处在于注册一个指定的回调函数

然后在发送的时候根据判断是否执行回调函数,顺便格式化信息

-- End --

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210105A09AG700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券