网站首页 > 编程文章 正文
一、问题描述
刚刚在进行STM32开发时看到几行非常让人不理解的代码,然后我去查了一下,发现非常有趣,在这分享给大家一起学习。
代码如图1所示,其中标记编号的三行就是问题代码。如果你也不理解,那么接下来就让我来详细的给大家介绍一下。
二、介绍
这三条语句中1、3其实是C标准库里面的宏函数,2是C库函数,它们的标准化格式如下所示:
1、void va_start(va_list ap, last_arg)
作用是初始化 ap 变量,它要 va_arg 和 va_end 宏共同使用。last_arg 是最后一个传递给函数的已知的固定参数,就是图中第44行省略号之前的参数“fmt”。
这个宏必须在使用 va_arg 和 va_end 之前被调用。
2、int vsprintf(char *str, const char *format, va_list arg)
使用参数列表发送格式化输出到字符串
3、void va_end(va_list ap)
允许使用了 va_start 宏的带有可变参数的函数返回。如果我们在返回之前在函数里没有调用 va_end,那么就会出现未定义的结果。
是不是已经蒙了???没关系,上面的都不重要,给你个例子立马明白。
#include <stdio.h>
#include <stdarg.h>
char buf[80];
int func_print(char *format, ...)
{
va_list aptr;
int ret;
va_start(aptr, format);
ret = vsprintf(buf, format, aptr);
va_end(aptr);
return(ret);
}
int main()
{
int i = 5;
float f = 27.0;
char s[50] = "haha";
func_print("%d %f %s", i, f, s);
printf("%s\n", buf);
return(0);
}
找个在线C编译器试一下,结果如图2
输出结果为:5 27.000000 haha
猜你喜欢
- 2024-09-11 STM32使用keil编译时出现结构体未定义错误原因
- 2024-09-11 STM32按键中断应用实例(stm32多个按键中断)
- 2024-09-11 如何安装KEIL5,从零起步学习单片机STM32系列
- 2024-09-11 如何使用keil 5 编写 51单片机 工程
- 2024-09-11 工程师实战:基于STM32 MCU的数字函数发生器
- 2024-09-11 如何使用STM32的片上调试接口进行软件调试和性能优化
- 2024-09-11 STM32 CubeMX生成的代码调试与优化技巧
- 2024-09-11 原来STM32单片机的开发如此的简单
- 2024-09-11 CubeMX与STM32的Keil开发基础(stm32cubeide keil)
- 2024-09-11 STM32硬件错误HardFault_Handler的处理方法
你 发表评论:
欢迎- 最近发表
-
- 数据不丢失 从Windows 11的DEV版降级到正式版
- Win11学院:在Windows11 25905预览版中如何启用Dev Drive
- DEVC++的卸载(devcon卸载驱动)
- win11 dev 开发版 升级攻略完整版
- 最新Windows11+Windows10系统各种版本永久激活密钥以及下载链接
- 想学Python,却还记不住语法?神仙书籍 python背记手册双手奉上
- 如何用Python语言开发大型服务器程序
- 30天Python 入门到精通(python零基础入门到精通)
- 入门扫盲:9本自学Python PDF书籍,让你避免踩坑,轻松变大神!
- 学好Python需要看的4本书推荐(学python好用的书)
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)