我是一名有用的助手,可以为您翻译文本。
我正在使用C++编写Arduino草图。 我希望用户能够在sketch.ino文件中直接定义常量
假设我们有三个文件:
在 sketch.h 中,我定义了:
在sketch.ino中,用户定义了MYOPTION:
在sketch.h中,我使用变量来定义宏:
在 sketch.cpp 中,我使用它来改进时间关键代码:
我正在使用C++编写Arduino草图。 我希望用户能够在sketch.ino文件中直接定义常量
#define
,这将需要编译代码。 Arduino IDE使用g ++编译器。假设我们有三个文件:
sketch.ino
sketch.h
sketch.cpp
在 sketch.h 中,我定义了:
#define OPTION_1 0
#define OPTION_2 1
#define OPTION_3 2
#define OPTION_4 3
#define SLOW 0
#define FAST 1
在sketch.ino中,用户定义了MYOPTION:
#define MYOPTION OPTION_2
在sketch.h中,我使用变量来定义宏:
#if MYOPTION == OPTION_1 | MYOPTION == OPTION_2
#define SPEED FAST
#else
#define SPEED SLOW
#endif
在 sketch.cpp 中,我使用它来改进时间关键代码:
MyClass::foo() {
// do something
#if SPEED == FAST
// do more
#if MYOPTION == OPTION_2
// do something extra
#endif
#endif
#if MYOPTION == OPTION_4
// do something else
#endif
}
不幸的是,在sketch.cpp文件中似乎无法识别MYOPTION的定义。然而,sketch.cpp可以识别在sketch.h中定义的变量。是否有一种方法可以全局定义预处理器变量,以便在使用它们的任何文件中都可以访问它们?
g++
编译器优化能力如何?您可能希望绕过所有这些预处理程序垃圾,让编译器来处理它,因为使用带有enum
的标准if
可以做到同样的效果,而且更加简洁。通常最好优先使用const
而不是#define
。 - tadmanMYOPTION
的那个定义看起来有点可疑,带有等号。 - Robert Prévostif(false)
块内的代码。如果该块内的代码在某些平台上无法编译,则确实只需要实际的#ifdef
类型块。 - tadmanMY_OPTION_2
等定义之后、#if
之前包含sketch.ino文件。 - Peter