c - c-module 有多少个头文件?
问题描述
我的项目中有一个模块,mymodule.c
它为我的项目的其余部分提供了很多功能。这些函数在mymodule.h
头文件中定义。
但是mymodule.c
还有很多其他定义或定义掩码。
例如:
#define STACKSIZE 1024
#define TIMER1 100
#define TCR_MASK 16U
#define TCR 16U
#define TCR_IR (0ULL << 8)
...
100 other defines or typedefs
我可以这样拆分:
mymodule.h
--->从其他地方使用的所有外部函数和声明。将此重命名为mymodule_public.h
?
mymodule_config.h
---> 配置,如定时器、控制参数或常量。
mymodule_masks.h
---> 描述符。
可能有更多的标题。
另一种方法是将除外部函数之外的所有函数都保留在mymodule.c
.
拆分为标题并给出标题名称的最佳实践是什么?
解决方案
通常,作为库的公共接口的头文件应该包含调用者使用函数所需的所有内容。
如果你有一堆#define
是使用这些函数所必需的,它们需要在 h 文件中。如果它们不需要但只是在内部使用,则应将它们保存在 c 文件中。
可以制作第二个头文件,它不是公共 API,但只包含 c 文件使用的内部常量。
至于在哪里放置#include,这有点主观。一般来说,我喜欢向库的用户展示该库附带的依赖项,以便他们可以确保他们拥有所有必要的文件,并且他们可以更轻松地解决奇怪的链接器错误。另一方面,人们可能会对“公开”库在公共标头中私下使用的包含感到不安(例如上面提到的第二个私有标头)。这里没有明显的对错,但尽量与放置#includes 的位置保持一致。
您使用多个标头的想法都以某个特定于库的前缀“mymodule”命名,总体而言非常合理。
推荐阅读
- amazon-web-services - 无法从 Spark 连接到 AWS Elasticsearch
- utf-8 - 如何检测和修复不正确的字符编码
- paypal - 贝宝沙盒账户:促进者和首要类型?
- ruby-on-rails - 开源画布 - NoMethodError(未定义的方法 `lti_guid'
- html - 如何发送带有格式化的 html 表格和消息的电子邮件?
- java - 将 3rd 方 API 与基于 jhipster 的 webapp 集成
- elasticsearch - 基于聚合结果的 Elasticsearch 部分更新
- python-3.x - 如何从数组中删除数据框
- python - 如何让这个程序在 PyCharm 中运行
- java - 使用 Java 8 在列表中交换嵌套映射的键