缺少头文件

我的本意是想做串口打印进行调试,于是我在usart.c中重写了这两个函数,这里顺便记录下如何串口打印
usart.c中

int fputc(int ch, FILE *f)
{HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);return ch;
}
int fgetc(FILE * f)
{uint8_t ch = 0;HAL_UART_Receive(&huart1,&ch, 1, 0xffff);return ch;
}

main函数之前

printf("Hello world!!!\n");

本来以为大功告成,结果出现了FILE没有定义,…/Core/Src/main.c(93): warning: #223-D: function “printf” declared implicitly 这些错误,本质上的原因是因为没有在uart.h 中声明 #include <stdio.h>,这主要是没有理解重定义函数的意义。
printf 定义在 <stdio.h> 头文件中,printf 函数根据 format 字符串给出的格式打印输出,stdout(标准输出)中,当然,printf 函数是不会一个字符一个字符去输出,它会调用更底层的 I/O 函数:fputc去逐个字符打印。fputc 也定义于头文件 <stdio.h>中。

添加好头文件后,几个常用的示例:

  char str[20];uint8_t ch;/* 复位所有外设,初始化Flash接口和系统滴答定时器 */HAL_Init();/* 配置系统时钟 */SystemClock_Config();/* 初始化串口并配置串口中断优先级 */MX_DEBUG_USART_Init();/* 调用格式化输出函数打印输出数据 */printf("Hello world!!!\n");/* sprintf函数把格式化的数据写入某个字符串  */  sprintf(str,"今天是个好日子,20%02d-%02d-%02d",15,10,04);  /* 调用格式化输出函数打印输出数据 */printf("%s\n",str);/* 无限循环 */while (1){ch=getchar();HAL_UART_Transmit(&huart1,&ch,1,0);}

重复定义

这个我遇到过两种:
1 我本来是想写一个新的bsp,于是我把bsp_led.c和.h分别进行复制,改了个名字,结果没有修改。
ifdef 的用法

复制代码
#define   KEY1_PA0#ifdef    KEY1_PA0
-------------第一段-----------------
#define               macKEY1_GPIO_CLK                      RCC_APB2Periph_GPIOA
#define               macKEY1_GPIO_PORT                     GPIOA
#define               macKEY1_GPIO_PIN                        GPIO_Pin_0#else    //KEY2_PC13
-------------第二段-----------------
#define               macKEY1_GPIO_CLK                      RCC_APB2Periph_GPIOC
#define               macKEY1_GPIO_PORT                     GPIOC
#define               macKEY1_GPIO_PIN                        GPIO_Pin_13#endif
复制代码

如果定义过KEY1_PA0,则执行第一段代码,如果没有,执行第二段。
ifndef 用法

#ifndef __USART1_H
#define    __USART1_H//statement.#endif  // usart1.h

如果没有define过__USART1_H,就执行下面的语句;如果定义过,就不执行;
所以在一个.c文件里面,多次调用到该文件的时候,就相当于只调用一次。
这是头文件的常用写法!!由于我没有更改,就出现了两个相同的头文件定义。

2 这是关于extern的用法
当有一个变量需要在多个文件中用到时,不能定义在头文件中,可能会导致重复定义,要把该变量定义在某个.c文件中,另一个需要用到该变量的.c或者.h文件在该变量的声明前加extern
我们看一个示例:这是hal库定义的例子
usart.c中定义

UART_HandleTypeDef huart1

usart.h中

extern UART_HandleTypeDef huart1;

这是正确的,但如果UART_HandleTypeDef huart1定义在了.h文件中,在main函数里和uart.c中都使用用了usart.h,出现了重复的定义。

那些踩过的declared implicitly的坑相关推荐

  1. IAR for msp430 MDK中 warning: #223-D: function xxx declared implicitly 解决方法

    今天在EINT的范例里添加了一个函数,即eint.c中添加了一个datawrite()的函数,并在主函数main.c中调用,编译便警告 warning: #223-D: function " ...

  2. 【kafka】我用kafka两年踩过的一些非比寻常的坑

    1.概述 转载:我用kafka两年踩过的一些非比寻常的坑 我的上家公司是做餐饮系统的,每天中午和晚上用餐高峰期,系统的并发量不容小觑.为了保险起见,公司规定各部门都要在吃饭的时间轮流值班,防止出现线上 ...

  3. 这些年我踩过的`Mybatis`代码生成的坑

    这些年我踩过的Mybatis代码生成的坑 原谅我不成熟的想法,因为selectByExample真香 文章目录 这些年我踩过的`Mybatis`代码生成的坑 `Mybatis`代码生成工具 安装 配置 ...

  4. keil编程问题 -- main.c(75): warning: #223-D: function “XXX“ declared implicitly

    前言 我个人遇到的问题是我在文件的.h文件中定义了相关函数,但是在调用的时候发现给我报了一个警告  main.c(75): warning:  #223-D: function "USART ...

  5. KEIL 声明隐晦declared implicitly和重复定义symbol multiply defined

    初学者在调试移植KEIL文件时总是会遇到这种问题 Error L6200E: symbol multiply defined warning: #223-D: function "XXX&q ...

  6. IAR工程编译报错Warning[Pe223]: function “Get_Tempreture“ declared implicitly......

    IAR工程编译报错Warning[Pe223]: function "Get_Tempreture" declared implicitly E:\stm32编程文件\编程文件\4 ...

  7. function XX declared implicitly

    stm32 keilMDK出现warning: function XX declared implicitly 原创  2014年08月26日 14:50:47 26281 warning: #223 ...

  8. 【DSP】常见问题解决1——引脚功能设置,declared implicitly报错,时钟未配置引起的错误等

    一.引脚功能设置问题 当调试某个引脚功能时,首先要检查的是GPIO的设置模式是否正确 EALLOW;GpioCtrlRegs.GPAGMUX1.bit.GPIO13=0; //数字端子输出GpioCt ...

  9. function “assert_param“ declared implicitly

    使用STM32标准库警告( warning: #223-D: function "assert_param" declared implicitly) 问题 原因 解决 扩展 问题 ...

最新文章

  1. 用户控件(显示用户信息,修改用户名密码)的WebPart预览版
  2. 恶意代码入门知识汇总
  3. RocketMQ源码解析:Filtersrv
  4. linux echo 变量 字符串,echo命令 – 输出字符串或提取Shell变量的值 – 运维那些事...
  5. 山寨机来了:小米10至尊、透明版只要688
  6. iOS多线程之5.GCD的基本使用
  7. solr6.6 solrJ索引富文本(word/pdf)文件
  8. matlab中面板数据格式,MATLAB空间面板数据模型操作介绍
  9. 局域网内两台电脑设置共享文件夹并访问
  10. UOS系统如何查看windows系统的共享文件
  11. 解决可以上QQ,但是无法上网的问题
  12. Oculus客户端在Win10上面无法安装或者登陆的解决方法
  13. 实训9——蓝牙修改开锁密码
  14. 打工人:是什么决定了你的薪资水平?一张图带你揭开涨薪秘诀!
  15. 【Atcoder】AtCoder Beginner Contest 174总结
  16. Splus—基于AIR的Sina微博客户端
  17. (附源码)python+mysql+基于springboot小型车队管理系统 毕业设计061709
  18. 单品购买商城源码/单个商品详情页购买源码下载
  19. 无聊的生活,无聊的世界
  20. 一面向对象设计动物乐园

热门文章

  1. vue解决打包后文件过大的问题-使用压缩插件打包后压缩文件-compression-webpack-plugin
  2. matlab 冒号范围,MATLAB中冒号的用法
  3. 【GitHub或GitLab rejected】error: failed to push some refs to,Updates were rejected...
  4. 单片机的分频是什么意思?
  5. 解决windows10桌面输入法不见问题
  6. VSCode 插件大全
  7. TPC817隔离光耦使用小结
  8. 《数值分析》李庆扬 03 曲线拟合的最小二乘法
  9. 最小函数值(minval)
  10. 路由器被蹭网后,我有被黑的风险吗?