广告合作
  • 今日头条

    今日头条

  • 百度一下

    百度一下,你就知道

  • 新浪网

    新浪网 - 提供新闻线索,重大新闻爆料

  • 搜狐

    搜狐

  • 豆瓣

    豆瓣

  • 百度贴吧

    百度贴吧——全球领先的中文社区

  • 首页 尚未审核订阅工具 订阅

    Keil实现不定参数函数

    来源:网络收集  点击:  时间:2024-05-23
    【导读】:
    学过C语言的应该都不会忘记像printf、scanf等标准库函数和我们常用的函数有个很大的区别:支持可变数量的参数。而我们平常使用的函数都需要给定固定的参数值。那么怎么实现这种可变参数数量的函数呢?下面分享下Keil对于这种函数的实现操作,希望对需要的朋友有帮助。工具/原料moreKeil 5方法/步骤1/5分步阅读

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

    2/5

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

    3/5

    可变数量参数函数定义形式为:

    type functionName(type argName, ...)

    {

    }

    即一般至少第一个参数类型是已知的,后面的参数可以使用三个点好代替(注意是英文编码)。

    在函数体中需要定义一个va_list的变量,相当于可变参数的列表,使用va_start将函数参数加载到va_list列表当中。形式为va_start(va_list变量,函数参数),这样在后面即可以使用va_arg(va_list变量,变量类型)获取当前变量的值,并且每调用一次va_arg后变量指针就会后移一次。操作完成后应使用va_end(va_list变量)结束,否则在某些场合会导致内存泄漏。

    图中是使用可变参数数量函数定义的求和函数。

    4/5

    函数定义完毕后,可以使用:

    get_sum(求和参数个数,参数1,参数2,参数3,……);的形式调用,其中省略号代表其他参数,实际使用不能有省略号。

    比如get_sum(2, 1, 2);就是求1和2的和,由于有两个数参与求和,所以第一个参数为2.

    5/5

    我们可以通过软件仿真看看结果,可以看到对于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

    相关资讯

    ©2019-2020 http://www.1haoku.cn/ 国ICP备20009186号05-05 07:18:23  耗时:0.026
    0.0257s