gpt4 book ai didi

c++ - #define c-preprocessor constants ...我做错了什么?

转载 作者:行者123 更新时间:2023-12-02 09:52:51 24 4
gpt4 key购买 nike

我再次尝试使用 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>您将使用编译器标志来执行此操作。对于 gccclang应该是 -DDATA_MATTERS_DEBUG

关于c++ - #define c-preprocessor constants ...我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62927672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com