来自.h和.cpp的条件编译

时间:2011-04-26 19:19:46

标签: c++ c arduino

我正在尝试创建一个库文件。 .cpp文件有一些条件编译行。代码可以在以下网址找到:

HMC58X3.h http://sprunge.us/hEYW

HMC58X3.cpp http://sprunge.us/faRN

HMC58X3_raw.pde http://sprunge.us/BFVj

基本上,在Arduino草图文件HMC58X3_raw.pde中我定义了ISHMC5843,在HMC58X3.cppHMC58X3.h中,我确实有不同的代码要编译,具体取决于该标志是否已启用。

条件编译似乎适用于HMC58X3.h,而不适用于HMC58X3.cpp。它总是看起来好像没有定义ISHMC5843。如何才能工作?

3 个答案:

答案 0 :(得分:4)

#define不像全局变量。它是一个预处理器宏,仅适用于该编译单元的剩余文本。有几种方法可以做你想做的事:

  1. 使用config.h创建#define ISHMC5843,并确保将其包含在任何地方(并且在其他任何包含引用它之前)。
  2. 在您的Makefile中(在Arduino中可能无法访问),确保-DISHMC5843出现在每个编译行上,通常将其包含在CFLAGS中。 (有关如何确保CFLAGS是编译规则的一部分的详细信息超出了本问题的范围。)

答案 1 :(得分:0)

编译HMC58X3.cpp时,编译器未在HMC58X3_raw.pde中看到宏定义。 IMO,你最好使用一个全局布尔常量变量来实现你想要做的事情。

答案 2 :(得分:0)

我无法看到 HMC58X3.h或HMC58X3.cpp中如何定义ISHMC58431

在预处理文件时,预处理器必须能够看到定义。这通常通过#include在需要可见性的所有文件中包含#define的公共文件,或通过在编译器命令行上定义宏来完成,例如{{1}例如(编译器相关)。

这当然要求.pde文件也由预处理器处理,因为它具有-DISHMC58431语句,我认为它是。