You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么main_c.c已包含<assert.h>,func.c仍需引入该头文件?

核心原因

C语言采用翻译单元独立编译机制,每个.c源文件是一个完全独立的编译单元,不同单元的头文件包含关系互不传递:

  • 你在main_c.c中引入的<assert.h>仅对main_c.c本身的编译生效,不会共享给其他.c文件
  • 你的func.c中直接使用了assert宏,而这个宏的定义仅存在于<assert.h>头文件中,编译func.c时编译器找不到该宏的定义,因此抛出缺少头文件的提示。

额外注意:你贴出的func.c代码里把assert误写为asert,如果不是输入笔误请同步修正拼写,否则即使引入头文件也会报未定义错误。

修复方案

两种常用方案可选:

  • 直接在func.c头部添加#include <assert.h>,这是最推荐的做法:遵循「谁使用依赖谁显式引入」的原则,后续即便代码拆分移动也不会出现依赖缺失问题。
  • 如果多个.c文件都需要用到<assert.h>,可以把#include <assert.h>添加到公共头文件file.h中,所有引入了file.h的源文件都会自动继承该头文件,无需重复引入。

内容的提问来源于stack exchange,提问作者shaked maman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:06:07