C++:在包含的头文件中使用#define 常量 (Arduino)
C++: Use #define constant in included header files (Arduino)
我正在使用 PlatformIO,目前正在为 ESP32 开发代码。我有一些子库,我希望能够在其中进行调试日志记录。
为了启用调试日志,我认为最好在 main.cpp 中通过 #define MYDEBUG
左右设置一个常量,然后在包含的库中对其进行评估。我将我的代码分解为这个简单的例子:
main.cpp:
#include <Arduino.h>
#define MYDEBUG
#include "LedSetup.h"
void setup()
{
Serial.begin(9600);
LedSetup::doSomething();
Serial.println("Is there output?");
}
void loop()
{
}
LedSetup.h:
#ifndef LedSetup_h_
#define LedSetup_h_
#include <Arduino.h>
class LedSetup
{
public:
static void doSomething();
private:
static void logDebug(String message)
{
#ifdef MYDEBUG
Serial.print("LedSetup: ");
Serial.println(message);
#endif
}
};
#endif
LedSetup.cpp:
#include "LedSetup.h"
void LedSetup::doSomething()
{
logDebug("Did something!");
}
当我 运行 这样做时,我希望在串行日志中看到两行:
Did something!
和 Is there output?
但是我只看到Is there output
。所以很明显 MYDEBUG
的定义在包含的头文件中不可用。为什么?
我以前见过类似的东西,他们使用#define 作为在包含的头文件中设置内容的方式,例如:
https://github.com/FastLED/FastLED/wiki/ESP8266-notes
我在这里监督什么?
提前致谢,
蒂莫
您在 main.cpp
中定义的 MYDEBUG
仅影响 main.cpp
中 #define
之后的代码。它对您编译的任何其他文件都不可见。
完成您想要做的事情的最佳方法是将定义添加到您的 platformio.ini
文件中。
尝试在您的项目部分添加如下所示的行:
build_flags = -DMYDEBUG
如果您需要将 MYDEBUG
设置为特定值,您可以将其写为:
build_flags = -DMYDEBUG=23
这将告诉编译器为它编译的每个文件定义常量MYDEBUG
。
我正在使用 PlatformIO,目前正在为 ESP32 开发代码。我有一些子库,我希望能够在其中进行调试日志记录。
为了启用调试日志,我认为最好在 main.cpp 中通过 #define MYDEBUG
左右设置一个常量,然后在包含的库中对其进行评估。我将我的代码分解为这个简单的例子:
main.cpp:
#include <Arduino.h>
#define MYDEBUG
#include "LedSetup.h"
void setup()
{
Serial.begin(9600);
LedSetup::doSomething();
Serial.println("Is there output?");
}
void loop()
{
}
LedSetup.h:
#ifndef LedSetup_h_
#define LedSetup_h_
#include <Arduino.h>
class LedSetup
{
public:
static void doSomething();
private:
static void logDebug(String message)
{
#ifdef MYDEBUG
Serial.print("LedSetup: ");
Serial.println(message);
#endif
}
};
#endif
LedSetup.cpp:
#include "LedSetup.h"
void LedSetup::doSomething()
{
logDebug("Did something!");
}
当我 运行 这样做时,我希望在串行日志中看到两行:
Did something!
和 Is there output?
但是我只看到Is there output
。所以很明显 MYDEBUG
的定义在包含的头文件中不可用。为什么?
我以前见过类似的东西,他们使用#define 作为在包含的头文件中设置内容的方式,例如: https://github.com/FastLED/FastLED/wiki/ESP8266-notes
我在这里监督什么?
提前致谢, 蒂莫
您在 main.cpp
中定义的 MYDEBUG
仅影响 main.cpp
中 #define
之后的代码。它对您编译的任何其他文件都不可见。
完成您想要做的事情的最佳方法是将定义添加到您的 platformio.ini
文件中。
尝试在您的项目部分添加如下所示的行:
build_flags = -DMYDEBUG
如果您需要将 MYDEBUG
设置为特定值,您可以将其写为:
build_flags = -DMYDEBUG=23
这将告诉编译器为它编译的每个文件定义常量MYDEBUG
。