news 2026/5/19 16:24:28

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/5/18 13:45:21

LangFlow Matomo开源替代GA

LangFlow:用可视化方式重塑 AI 工作流 在今天,构建一个能理解用户意图、调用工具并给出精准回应的 AI 应用,早已不再是简单的“调个 API 就行”。即便是经验丰富的开发者,在面对复杂的提示工程、记忆管理、检索增强和多步推理链时…

作者头像 李华
网站建设 2026/5/18 21:06:18

Keil C51中LCD1602初始化流程手把手教程

从“白屏”到显示:彻底搞懂51单片机驱动LCD1602的初始化全过程你有没有遇到过这样的情况?电路接好了,代码烧进去了,Keil C51也编译通过了,可LCD1602就是不亮——要么全黑、要么满屏方块、要么干脆一点反应都没有&#…

作者头像 李华
网站建设 2026/5/17 5:19:56

Intel HAXM安装失败?通俗解释每一步排查方法

Intel HAXM安装失败?一文讲透排查思路与实战解决方案 你是不是也遇到过这样的场景:兴冲冲打开Android Studio,准备调试刚写的代码,结果一启动AVD模拟器,弹出一个红色警告框——“ HAXM is not installed ”&#xf…

作者头像 李华
网站建设 2026/5/8 22:38:24

Multisim数据库访问失败:服务组件安装指南

Multisim数据库连接失败?一文讲透服务组件安装与修复实战你有没有遇到过这样的场景:刚装好Multisim,满怀期待地打开软件准备画电路图,结果弹出一个刺眼的提示——“无法访问数据库”?元件库打不开、搜索不到元器件、原…

作者头像 李华
网站建设 2026/5/18 23:33:35

Multisim安装全流程解析:适合初学者的系统学习

从零开始搞定Multisim安装:新手避坑指南与实战全流程 你是不是也经历过这样的场景? 刚下定决心学电路仿真,兴致勃勃地下载了Multisim,结果点开安装包不到三步就弹出“Error 1324”;或者装完启动时提示“缺少 msvcr12…

作者头像 李华
网站建设 2026/5/19 3:20:40

LangFlow Simple Analytics无Cookie分析

LangFlow Simple Analytics无Cookie分析 在AI应用开发日益普及的今天,越来越多团队开始尝试构建基于大语言模型(LLM)的智能系统。然而,一个现实问题摆在面前:如何在不牺牲数据隐私的前提下,快速验证复杂的L…

作者头像 李华