我正在使用嵌入式系统,最终得到了大量的硬件接口#define
宏。我想将所有这些都放入一个单独的文件中(用于 OOP-ness),但我不知道最好的方法#include
。我是否只是将它们全部放入 .c 文件中,然后将其包含在内?将这些放在 .h 文件中似乎很愚蠢。
问问题
4689 次
4 回答
14
我看不出 .h 文件有什么问题。
于 2010-03-11T21:06:10.127 回答
7
这些应该放在.h
文件中。另一个选项是一个.c
文件,这需要使用#include
来包含一个文件,如果它使用每个文件将直接对应于一个编译文件.c
的标准假设,这肯定会混淆人们 - 以及混淆你的 makefile 。.c
.o
正常模式是.h
文件用于包含在其他地方(特别是在多个其他地方).c
中的东西,并且文件用于那些被编译为目标文件的东西。
因此,以下内容通常会写入.h
文件:
- 函数原型
- 常量声明
- 全局变量
extern
声明 - 内联函数定义
- 类型定义
- 和宏定义,例如您要询问的内容。
相反,以下内容通常会进入.c
文件:
- 全局变量定义
- 将被编译成目标代码并链接的函数定义
.c
当您没有任何内联函数时,“函数定义只进入文件”的情况只是退化的情况。
在 C++ 中,许多函数以模板形式定义,因此无论何时使用定义都需要包含在内,这些定义通常位于.h
(或.hpp
,或其他)文件中。所以这种事情肯定是有先例的。
于 2010-03-12T00:18:12.273 回答
2
我不一定推荐这个,但在过去 10 多年的很多嵌入式项目中已经看到它:将内联函数包含为 .inl。
布鲁克斯很好地分解了职责。您可能会考虑将内联和宏定义与普通函数原型等分开:
#include "prototypes.h"
#include "macros.inl"
int foo(void);
int bar(char);
你的最终目标是一致性:任何布局决策都应该帮助那些成功的人。
于 2010-03-12T17:34:39.953 回答
1
把它们放在你需要的地方。
如果您只需要一个文件,请将其放在该文件的顶部。
如果您需要多个文件,则将其放入头文件中。
于 2010-04-13T14:02:56.473 回答