我正在使用嵌入式系统,我最终得到了大量的HW接口#define
宏。我想将所有这些放入一个单独的文件中(对于OOP-ness),但我不知道#include
的最佳方法。我只是将它们全部放入.c文件中,然后包含它吗?把它们放在.h文件中似乎很傻。
答案 0 :(得分:13)
我没有看到.h文件有什么问题。
答案 1 :(得分:7)
这些应该放在.h
文件中。另一个选项是.c
文件,这需要使用#include
来包含.c
文件,这肯定会让人感到困惑 - 如果它使用的话,会混淆你的makefile标准假设每个.c
文件将直接对应于已编译的.o
文件。
正常模式是.h
个文件用于包含在其他地方(特别是在其他多个地方)的内容,而.c
个文件用于编译一次的内容目标文件。
因此,以下内容通常会进入.h
个文件:
extern
声明相反,以下内容通常会进入.c
个文件:
“函数定义仅进入.c
文件”的情况只是当您没有任何内联函数时的简并情况。
在C ++中,许多函数以模板形式定义,因此无论何时使用它们都需要包含定义,这些定义通常都在.h
(或.hpp
,或者无论如何)文件。所以这种事情肯定有先例。
答案 2 :(得分:2)
我不一定推荐这个,但在过去10多年里已经在很多嵌入式项目中看到了它:将内联函数包含为.inl。
布鲁克斯很好地分解了责任。您可以考虑将内联和宏定义与普通函数原型分开,例如:
#include "prototypes.h"
#include "macros.inl"
int foo(void);
int bar(char);
您的最终目标是一致性:任何布局决策都应该帮助那些接替您的人。
答案 3 :(得分:2)
将它们放在您需要的地方。
如果只需要一个文件,则将其放在该文件的顶部。
如果您需要多个文件,请将其放在头文件中。