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

在任意C语言标准下,能否将所有头文件包含移至源文件中?

关于头文件包含位置的问题解答

结论:不能这么做

不管是哪个版本的C语言标准,都不能只把<stdint.h>的包含语句放在sum.c里,而不在sum.h中声明。

为什么不行?

sum.h里的函数声明用到了uint16_t这个类型,而uint16_t是在<stdint.h>里定义的。如果sum.h里不包含<stdint.h>,当其他源文件(比如main.c)包含sum.h时,编译器处理uint16_t sum(uint16_t a, uint16_t b);这句声明时,根本识别不了uint16_t,直接会报“未知类型名”的编译错误。

头文件的基本要求就是自包含——只要某个源文件包含了这个头文件,就能直接编译通过,不需要额外先包含别的头文件。要是依赖的头文件只在源文件里包含,那所有使用这个模块的代码都得手动先包含一遍<stdint.h>,既麻烦又容易出错。

正确的做法

必须在sum.h里包含<stdint.h>,同时加上头文件保护防止重复包含:

#ifndef SUM_H
#define SUM_H

#include <stdint.h>

uint16_t sum(uint16_t a, uint16_t b);
// 其他数值类型的求和函数声明

#endif // SUM_H

至于sum.c,只要包含自己的头文件sum.h就行,<stdint.h>会被间接包含进来,当然你也可以单独再写一遍<stdint.h>的包含语句,不过没必要。

内容的提问来源于stack exchange,提问作者abdo raqi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:45:42