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

Tri*_*tan 8 c embedded code-organization include c-preprocessor

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

Mat*_*son 13

我没有看到.h文件有什么问题.

  • @Tristan:函数的真实情况不一定适用于宏; 内联函数驻留在头文件中也很常见 (3认同)
  • @Tristan&Christoph:将#define MACRO放入.h文件中是很平常的.这些MACRO是在线功能.我向读者清楚的一种方式是MACRO而不是功能; 我通常以大写形式声明我的所有MACRO. (2认同)

Bro*_*ses 7

这些应该放在.h文件中.另一个选项是一个.c文件,如果它使用标准假设每个文件将直接对应于编译文件,则需要使用#include包含.c文件,这将非常混淆人们 - 以及混淆makefile ..c.o

正常模式是.h文件用于包含在其他地方(特别是在其他多个地方)的.c文件,并且该文件用于一次编译到目标文件中的文件.

因此,以下内容通常会进入.h文件:

  • 功能原型
  • 不断的声明
  • 全局变量extern声明
  • 内联函数定义
  • 类型定义
  • 和宏定义,例如你要问的内容.

相反,以下内容通常会进入.c文件:

  • 全局变量定义
  • 将编译为目标代码并链接的函数定义

"功能定义仅进入.c文件"的情况只是当您没有任何内联函数时的简并情况.

在C++中,许多函数以模板形式定义,因此无论何时使用它们都需要包含定义,这些定义通常都放在.h(或者.hpp,或者其他)文件中.所以这种事情肯定有先例.