news 2026/1/14 16:03: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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/30 20:14:21

2026年AI证书选择:当“热门推荐”遇上“真实需求”

随着2026年的临近,规划考取一张AI证书成为许多职场人的年度目标。然而,一个普遍的冲突随之浮现:市场充斥着各类“必考推荐”,但这些通用建议往往与个人复杂的职业背景和转型需求难以匹配。如何让选择从“人云亦云”转向“为我所用…

作者头像 李华
网站建设 2026/1/12 4:19:50

操作指南:测试工业SSD真实USB3.1传输速度

挑战千兆传输:如何真实测试工业SSD的USB3.1速度? 你有没有遇到过这种情况?手头一块标称支持 USB3.1 Gen2 的工业级SSD,理论上应该跑出接近 1GB/s 的传输速度,结果实测下来只有三四百 MB/s,甚至更低。拷贝…

作者头像 李华
网站建设 2025/12/30 8:37:43

通过PWM精准控制音量的蜂鸣器音乐代码示例

让蜂鸣器“会说话”:用PWM实现动态音量控制的Arduino音乐实战你有没有试过用Arduino驱动蜂鸣器播放一段旋律?那种“嘀——嘀——”的机械提示音虽然实用,但总让人觉得少了点情感。如果能让它像钢琴一样有强弱起伏、像小提琴那样渐入渐出&…

作者头像 李华
网站建设 2025/12/23 3:00:49

cv2.cornerHarris() 详解(Harris 角点检测)

cv2.cornerHarris() 详解(Harris 角点检测) cv2.cornerHarris() 是 OpenCV 中实现Harris 角点检测的核心函数,用于检测图像中的角点(角点定义:图像中在两个正交方向上灰度变化都很大的像素点,如物体边缘的交…

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

v-scale-screen与Element Resize检测联动:深入解析

如何让大屏页面在任何设备上完美还原?揭秘v-scale-screen与 ResizeObserver 的黄金组合你有没有遇到过这样的场景?设计师甩来一张19201080的精致大屏设计稿,信誓旦旦地说:“就按这个做,别变形。”结果上线后&#xff0…

作者头像 李华
网站建设 2026/1/10 6:09:58

快速入门:单精度浮点数转换的三大要点

深入理解单精度浮点数转换:从底层原理到工程实践你有没有遇到过这样的问题?在嵌入式系统中,明明写的是0.1f 0.2f,结果却不等于0.3f;音频处理时滤波效果不理想,排查半天才发现是浮点系数没对齐;…

作者头像 李华