世界模型:一文讲清楚AI下一个十年的核心战场
2026/6/9 21:43:16
.c文件中实现.c文件没有包含对应的头文件ssd1306.h
void ssd1306_WriteData(uint8_t data);
ssd1306.c
#include "ssd1306.h" ssd1306_WriteData(0xFF);
app.c
void ssd1306_WriteData(uint8_t data) { // 函数实现 }
注意:app.c中并没有#include "ssd1306.h"。
在 C 语言中,函数定义本身就包含了函数声明。
void ssd1306_WriteData(uint8_t data) { }
这段代码已经完整地告诉编译器:
因此,在实现函数的源文件中,
是否包含声明它的头文件,并不影响该函数是否存在。
app.c
编译器看到函数定义,记录下一个全局函数符号ssd1306_WriteData
ssd1306.c
通过包含ssd1306.h,编译器知道该函数的声明,调用是合法的
链接器只关心一件事:
每一个被使用的函数,是否能找到唯一的实现
| 文件 | 作用 |
|---|---|
ssd1306.o | 使用ssd1306_WriteData |
app.o | 定义ssd1306_WriteData |
符号匹配成功,链接自然通过。
链接器不会处理任何头文件。
C 语言允许函数声明和定义分散在不同的源文件中,
只要链接阶段符号能够匹配,程序就可以正常工作。
ps:本文有AI辅助生成。
在学习过程中第一次见到这种写法,感觉不是很规范的写法。记录一下!!!