identifier “XXXXX” is undefined
= 变量“XXXXX”没有被定义
报错:…/Core/Src/main.c(96): error: #20: identifier “hdma_usart3_rx” is undefined
拼写错误
identifier “XXXXX” is undefined
= 变量“XXXXX”没有被定义
报错:…/Core/Src/main.c(96): error: #20: identifier “hdma_usart3_rx” is undefined
链接错误
拼写错误外的就先统称为链接错误
.c、.h与main.c(源文件、头文件、主函数文件
将程序视为阅读
- main.c为文章
- main.h为文章的注释
- usart.h、dma.h为词典中 某一模块的词语的粗略解释
- usart.c、dma.h为词典的词语的具体解释
那么程序进行流程就是:
-
我们先开始阅读“ main.c文章”
-
发现有读不懂的“词语” MX_DMA_Init();(函数,结构体变量)
-
我们先尝试在“注释”(main.h)中找答案
-
“正文”与“注释”中可能不直接给你答案,而是告诉你,当你阅读不懂“文章”时,请去查“字典”
-
在“字典”的dma.h模块中,你查到了“词语”MX_DMA_Init();
-
你知道了他的基本信息void MX_DMA_Init(void);(函数传入参数与返回值的类型)
-
但你仍需要知道这个“词语”的具体意思
-
所以你跟着dma.h的指引,去到了他指向的dam.c查找“词语”的具体意思
-
最后你读懂了这个“词语”
-
然后你继续阅读,重复这个流程
理解链接
解决问题
- 首先排除拼写错误
- 接着我们找链接错误在哪
- “hdma_usart3_rx”在usart.c中定义
- main.c中也引用了usart.h
- 那么一定是usart.h没有指向usart.c中的“hdma_usart3_rx”
- 我们只需在usart.h中extern插入下hdma_usart3_rx,告诉编译器hdma_usart3_rx不在当前文件中,请你去别处找找
- 这样就完成了usart.h指向usart.c
常用的解决方法
在.h文件中extern xxxx,相当于声明变量,用以链接.h与.c文件