news 2026/9/2 23:45:06

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/9/2 4:53:05

LangFlow SpeedCurve RUM真实用户监控

LangFlow 与 SpeedCurve RUM:从 AI 工作流构建到用户体验闭环的工程实践 在 AI 应用快速落地的今天,一个常见的困境浮现出来:我们能用大模型做出“聪明”的功能,但用户却因为加载慢、响应卡顿而选择离开。这种“能跑却不流畅”的现…

作者头像 李华
网站建设 2026/9/2 18:15:43

49、C编程:从Main方法到嵌套类型的全面解析

C#编程:从Main方法到嵌套类型的全面解析 1. Main方法的特性与可访问性 1.1 Main方法的基本特性 Main方法是程序的入口点,它必须始终被声明为静态的,并且可以在类或结构体中声明。一个程序只能有一个符合四种可接受入口点形式的Main声明,但可以合法地声明其他名为Main的方…

作者头像 李华
网站建设 2026/9/2 22:14:24

STM32CubeMX串口通信接收图解说明(小白友好)

手把手教你用STM32CubeMX实现串口接收(图解避坑指南)你是不是也遇到过这种情况:花了一整天配好STM32的串口,结果上位机发数据过来,MCU却“装聋作哑”?或者只收到第一个字节就再也没反应了?别急。…

作者头像 李华
网站建设 2026/9/2 21:25:32

LangFlow Kingsoft Cloud KSME

LangFlow 与金山云 KSME:构建企业级可视化 AI 应用的新范式 在大模型技术加速落地的今天,越来越多企业开始尝试将 LLM(大型语言模型)融入业务流程——从智能客服到知识问答,从内容生成到决策辅助。然而一个现实问题始终…

作者头像 李华
网站建设 2026/9/3 0:45:45

LangFlow Highlight.io开发者优先监控

LangFlow Highlight.io:开发者优先的 AI 应用构建与可观测性新范式 在大语言模型(LLM)迅速渗透到产品核心逻辑的今天,AI 应用开发正面临一场深刻的工程化变革。过去,构建一个具备上下文理解、工具调用和记忆能力的智能…

作者头像 李华
网站建设 2026/9/2 19:02:10

LangFlow GoatCounter极简网页计数器

LangFlow GoatCounter:构建极简AI应用的轻量闭环 在AI工具日益普及的今天,一个开发者最常被问到的问题不再是“你的模型多强大”,而是:“它真的有人用吗?” 这个看似简单的问题背后,其实藏着从技术实现到产…

作者头像 李华