作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我再次尝试使用 arduino 并创建一个小模块,只是为了熟练掌握 cpp sintaxe。
我正在尝试使用静态方法创建实用程序模块,并使用 header 常量来决定是否必须打印调试消息。
但即使使用#ifndef 来避免重复,我也没有工作
在模块 DataMattersUtil 中,我使用 #ifndef 将 header 常量 DATA_MATTERS_DEBUG 设置为 false 以避免重复。但是当我执行此代码时,该消息不会在串行监视器上打印,因为该常量始终为 false,即使在第一个执行的模块 DataMattersRunner.ino 上将其设置为 true。
文件:DataMattersRunner.ino
#define DATA_MATTERS_DEBUG true
#include <DataMattersRunner.h>
DataMattersRunner runner;
void setup() {
runner.setup();
}
void loop() { }
文件:DataMattersRunner.cpp
#include <DataMattersUtil.h>
void DataMattersRunner::setup() {
DataMattersUtil::debug("Running ...");
}
文件:DataMattersRunner.cpp
#include <DataMattersUtil.h>
void DataMattersRunner::setup() {
DataMattersUtil::debug("Running ...");
}
文件:DataMattersUtil.h
#ifndef DATA_MATTERS_DEBUG
#define DATA_MATTERS_DEBUG false
#endif
#ifndef DataMattersUtil_h
#define DataMattersUtil_h
class DataMattersUtil {
public:
static void debug(String message);
};
void DataMattersUtil::debug(String message) {
if(DATA_MATTERS_DEBUG) {
Serial.println(message);
}
}
#endif
最佳答案
如DataMattersUtil.h
包含在多个编译单元中,您必须定义 DATA_MATTERS_DEBUG
在他们所有人中。
而不是添加 #define DATA_MATTERS_DEBUG
之前 全部 #include <DataMattersUtil.h>
您将使用编译器标志来执行此操作。对于 gcc
和 clang
应该是 -DDATA_MATTERS_DEBUG
关于c++ - #define c-preprocessor constants ...我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62927672/
我是一名优秀的程序员,十分优秀!