news 2026/8/10 21:04:12

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/8/11 3:14:49

LangFlow如何降低AI项目开发成本?真实案例数据分析

LangFlow如何降低AI项目开发成本?真实案例数据分析 在企业竞相布局大语言模型(LLM)应用的今天,一个现实问题日益凸显:从提出“做个智能客服”到真正跑通第一个可用原型,往往需要两周甚至更久。而在这期间&a…

作者头像 李华
网站建设 2026/8/11 3:58:46

LangFlow Mouseflow点击分布与滚动图

LangFlow 与用户行为洞察:当 AI 开发工具学会“看懂”用户 在今天,构建一个基于大语言模型(LLM)的智能应用早已不再是仅靠写几行代码就能完成的任务。从提示工程、链式调用到代理决策和记忆管理,LangChain 框架虽然功能…

作者头像 李华
网站建设 2026/8/10 10:45:20

LangFlow Catchpoint企业级体验监测

LangFlow Catchpoint:构建企业级AI体验监测新范式 在生成式AI迅猛发展的今天,企业不再满足于“模型能跑通”,而是越来越关注“用户是否真的用得好”。一个智能客服系统即便99%的时间返回了200状态码,但如果它开始胡言乱语、答非所…

作者头像 李华
网站建设 2026/8/11 6:33:25

LangFlow CTyun CloudMonitor电信云

LangFlow 与天翼云 CloudMonitor:构建可信赖的低代码 AI 应用闭环 在大模型技术加速落地的今天,越来越多企业希望将 LLM 能力融入客服、知识管理、智能助手等业务场景。但现实往往充满挑战:LangChain 的 API 层级复杂,调试成本高&…

作者头像 李华
网站建设 2026/8/11 0:54:49

深入理解奇偶校验原理:零基础入门指南

从一个比特说起:奇偶校验如何为数据安全“站岗放哨”你有没有遇到过这种情况——串口调试时突然收到一串乱码,内存读出来和写进去的值不一样,或者某个传感器的数据莫名其妙跳变?这些看似“玄学”的问题,背后很可能就是…

作者头像 李华
网站建设 2026/8/11 4:24:08

LangFlow Bugsnag稳定可靠的错误报告

LangFlow Bugsnag:构建稳定、可观测的AI工作流开发环境 在AI应用开发日益普及的今天,一个典型的矛盾正变得愈发突出:我们拥有越来越强大的语言模型和丰富的工具链,但调试复杂流程却依然像在“盲人摸象”。尤其是在使用可视化工具…

作者头像 李华