Keil实现不定参数函数

时间:2024-10-12 02:26:33

1、涉及到可变数量参数的函数,就少不了va_list、va_start、va_end、va_arg这四个宏,他们都定义在stdarg.h这个头文件,需要将其包含到程序当中。

Keil实现不定参数函数

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

Keil实现不定参数函数
Keil实现不定参数函数

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

Keil实现不定参数函数

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

Keil实现不定参数函数

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

Keil实现不定参数函数
© 手抄报圈