程序员开发实例大全宝库

网站首页 > 编程文章 正文

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

zazugpt 2024-09-11 11:34:00 编程文章 20 ℃ 0 评论

一、问题描述

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

代码如图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 <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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表