在C语言中将所有函数原型放入单个头文件是否为最佳实践?
C语言头文件组织:集中放还是一对一?
优先选一对一(每个.c配对应.h)
这是C项目的标准玩法,集中式只适合那种两三文件的小玩具项目。
为啥选一对一?
- 模块边界清楚:每个头文件只放对应源文件对外暴露的函数原型,别人用的时候一看就知道哪些是能用的,不会被一堆无关函数晃眼。
- 编译更快:用到哪个模块就包含哪个头文件,不用把所有原型都拉进来,改某个模块的时候,也只有依赖它的代码需要重新编译,不会整个项目重编。
- 减少命名冲突:不同模块的函数就算名字像,只要不包含对应的头文件,就不会搅在一起出问题。
- 好维护:改某个模块的接口,只动对应的头文件就行,不用在一个大文件里翻半天,也不会不小心改到其他模块的内容。
集中式啥时候用?
- 项目极小,比如就写个小工具,总共没几行代码,犯不上搞模块化。
- 临时写测试代码,快速验证逻辑,不想花时间搭结构。
必做的细节:头文件保护
不管用哪种方式,头文件都得加保护,防止重复包含导致编译错误,两种写法:
// 兼容性最好的写法 #ifndef MY_MODULE_H #define MY_MODULE_H // 这里放函数原型、宏定义等内容 #endif // MY_MODULE_H
或者用编译器支持的#pragma once,写起来更省事,但不是所有编译器都认,兼容性不如上面的写法。
内容的提问来源于stack exchange,提问作者Yahya Oulha
相关产品推荐
相关产品推荐

