我在C中将所有这些类似函数的#defines放在哪里?

时间:2010-03-11 21:00:08

标签: c include embedded c-preprocessor code-organization

我正在使用嵌入式系统,我最终得到了大量的HW接口#define宏。我想将所有这些放入一个单独的文件中(对于OOP-ness),但我不知道#include的最佳方法。我只是将它们全部放入.c文件中,然后包含它吗?把它们放在.h文件中似乎很傻。

4 个答案:

答案 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)

将它们放在您需要的地方。

如果只需要一个文件,则将其放在该文件的顶部。

如果您需要多个文件,请将其放在头文件中。