Keil实现不定参数函数
来源:网络收集 点击: 时间:2024-05-23涉及到可变数量参数的函数,就少不了va_list、va_start、va_end、va_arg这四个宏,他们都定义在stdarg.h这个头文件,需要将其包含到程序当中。

我们可以通过在stdarg.h上右击选择“Open document stdarg.h”打开该头文件,可以在其中看到va_list、va_start、va_end、va_arg四个宏定义的具体实现。


可变数量参数函数定义形式为:
type functionName(type argName, ...)
{
}
即一般至少第一个参数类型是已知的,后面的参数可以使用三个点好代替(注意是英文编码)。
在函数体中需要定义一个va_list的变量,相当于可变参数的列表,使用va_start将函数参数加载到va_list列表当中。形式为va_start(va_list变量,函数参数),这样在后面即可以使用va_arg(va_list变量,变量类型)获取当前变量的值,并且每调用一次va_arg后变量指针就会后移一次。操作完成后应使用va_end(va_list变量)结束,否则在某些场合会导致内存泄漏。
图中是使用可变参数数量函数定义的求和函数。

函数定义完毕后,可以使用:
get_sum(求和参数个数,参数1,参数2,参数3,……);的形式调用,其中省略号代表其他参数,实际使用不能有省略号。
比如get_sum(2, 1, 2);就是求1和2的和,由于有两个数参与求和,所以第一个参数为2.

我们可以通过软件仿真看看结果,可以看到对于get_sum(5, 1, 2, 3, 4, 5);它的计算结果为0xF即15,这与1+2+3+4+5是一致的。

1、va_start()务必和va_end()配对使用,避免内存泄漏!
2、函数定义的时候需要使用省略号,但是调用的时候不能有!
版权声明:
1、本文系转载,版权归原作者所有,旨在传递信息,不代表看本站的观点和立场。
2、本站仅提供信息发布平台,不承担相关法律责任。
3、若侵犯您的版权或隐私,请联系本站管理员删除。
4、文章链接:http://www.1haoku.cn/art_835856.html