用keil5进行STM32项目开发时,那些让人摸不着头脑的程序

一、问题描述

刚刚在进行STM32开发时看到几行非常让人不理解的代码,然后我去查了一下,发现非常有趣,在这分享给大家一起学习。

代码如图1所示,其中标记编号的三行就是问题代码。如果你也不理解,那么接下来就让我来详细的给大家介绍一下。

图1.问题代码

二、介绍

这三条语句中1、3其实是C标准库里面的宏函数,2是C库函数,它们的标准化格式如下所示:

1、void va_start(va_list ap, last_arg)

作用是初始化 ap 变量,它要 va_argva_end 宏共同使用。last_arg 是最后一个传递给函数的已知的固定参数,就是图中第44行省略号之前的参数“fmt”。

这个宏必须在使用 va_argva_end 之前被调用。

2、int vsprintf(char *str, const char *format, va_list arg)

使用参数列表发送格式化输出到字符串

3、void va_end(va_list ap)

允许使用了 va_start 宏的带有可变参数的函数返回。如果我们在返回之前在函数里没有调用 va_end,那么就会出现未定义的结果。

是不是已经蒙了???没关系,上面的都不重要,给你个例子立马明白。

#include 
#include 

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
", buf);
   return(0);
}

找个在线C编译器试一下,结果如图2

图2

输出结果为:5 27.000000 haha

展开阅读全文

页面更新:2024-04-13

标签:在线   行省   摸不着头脑   编译器   初始化   字符串   变量   语句   函数   参数   代码   程序   项目

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top