news 2026/7/18 9:51:44

C 语言中函数声明、定义与链接的一点说明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C 语言中函数声明、定义与链接的一点说明

在 C 项目中,可能会遇到下面这种情况:

  • 函数在某个头文件中声明
  • 在其他源文件中被调用
  • 却在另一个.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辅助生成。

在学习过程中第一次见到这种写法,感觉不是很规范的写法。记录一下!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/18 15:30:23

基于usb_burning_tool的产线刷机操作指南

产线刷机实战:如何用 usb_burning_tool 实现高效稳定的批量固件烧录在智能硬件的量产线上,最让人头疼的环节之一就是“烧录”——给成百上千台设备写入系统、Bootloader 和配置文件。如果还靠插 SD 卡、连串口、手动操作,不仅效率低得令人发指…

作者头像 李华
网站建设 2026/7/18 0:39:55

LangFlow Treo APMP性能监控

LangFlow Treo APMP:构建可观察的AI工作流 在企业加速拥抱大模型的今天,一个现实问题日益凸显:如何让AI应用不仅“跑得起来”,还能“看得清楚”?我们见过太多团队用LangChain快速搭出智能客服原型,却在上线…

作者头像 李华
网站建设 2026/7/18 10:15:46

ModbusTCP报文解析安全风险与防护建议

ModbusTCP报文解析中的安全陷阱与实战防护策略你有没有想过,一条看似简单的ModbusTCP报文,可能正悄悄打开通往PLC的“后门”?在现代工厂自动化系统中,ModbusTCP无处不在。它连接着HMI、SCADA和现场PLC,支撑着从温度控制…

作者头像 李华
网站建设 2026/7/17 0:07:51

ESP32-CAM如何连接手机APP?一文说清通信机制(Arduino)

ESP32-CAM 如何连接手机APP?一文讲透通信原理与实战配置(Arduino)你有没有想过,用不到50块钱的模块实现一个可以远程拍照、实时预览的小型监控系统?ESP32-CAM 就是这样一个“性价比怪兽”—— 它体积小巧、自带Wi-Fi和…

作者头像 李华
网站建设 2026/7/17 5:43:22

LangFlow Plausible轻量级隐私友好分析

LangFlow 与 Plausible:构建高效且负责任的 AI 应用实践 在当今快速演进的技术生态中,AI 应用的开发效率和用户数据隐私正成为开发者必须同时面对的两大命题。一方面,大型语言模型(LLM)的爆发让智能客服、自动问答、内…

作者头像 李华
网站建设 2026/7/18 0:16:28

LangFlow DebugBear网页性能测试

LangFlow 与 DebugBear:构建高效、流畅的 AI 应用开发闭环 在当今 AI 工程化浪潮中,一个核心矛盾日益凸显:大语言模型(LLMs)的能力越来越强,但将其整合为可用系统的过程却依然复杂。开发者需要连接模型、提…

作者头像 李华