• C语言


    参考
    C 可变参数 | 菜鸟教程

    void func(const char* str,...)
    {
        ...
    }
    

    func的最后一个参数写成 ... ,表示可变参数, C语言的printf就是类似这种声明.

    为了使用可变参数,需要包含头文件 stdarg.h.

    使用步骤

    • 定义一个函数,最后一个参数为省略号,省略号前面可以设置自定义参数。
    • 在函数定义中创建一个 va_list 类型变量,该类型是在 stdarg.h 头文件中定义的。
    • 使用 int 参数和 va_start 宏来初始化 va_list 变量为一个参数列表,va_start需要传递两个参数,一个是va_list变量,另一个使用可变参数的函数中的可变参数之前的一个参数,比如要在func中,应该这样写,va_list args; va_start(args,str);。宏 va_start 是在 stdarg.h 头文件中定义的。
    • 使用 va_arg 宏和 va_list 变量来访问参数列表中的每个项。
    • 使用宏 va_end 来清理赋予 va_list 变量的内存。

    实例

    Stm32F4中实现类似printf输出的LCD显示函数.
    需要头文件:
    stdarg.h (va_list va_start va_end)
    stdio.h (vsprintf malloc)
    string.h (strlen)

    注意需要即时释放内存!!!

    void LCD_ShowStringx(uint16_t x,uint16_t y,uint16_t color,const char*str,...)
    {
    	uint16_t str_len = strlen(str);
    	char* strFormatted = malloc(str_len*sizeof(char));
    	va_list args;	//存放可变参数的数据结构
    	va_start(args,str); //初始化可变参数,需要传一个va_list类型变量,和可变参数之前的参数,这里是str
    
    vsprintf(strFormatted,str,args);
    LCD_ShowString(x,y,(u8*)strFormatted,color); //此函数再头文件 stdio中
    
    free(strFormatted);
    va_end(args);
    

    }

    调用

    float value = 0;
    LCD_ShowStringx(30,50,POINT_COLOR,"value=%.2f",value);
    
      </div>
  • 相关阅读:
    6.1.1.1 属性类型之数据属性
    6.1 理解对象
    5.7.2.4 random() 方法
    5.7.2.3 舍入方法
    5.7.2.2 min()和max()方法
    5.7.2.1 Math对象
    5.7.1.4 window对象
    frontend2_s9_part2_fe_d48_form
    s10_part3_django_basic.md
    frontend1_s9_part2_d47_html
  • 原文地址:https://www.cnblogs.com/Laggage/p/11254050.html
Copyright © 2020-2023  润新知