我发现一个问题在 C 中运行正常但导致Arduino出现问题(在Windows上)
#define NO_PROBLEM
#ifdef NO_PROBLEM
char charBuf[16];
unsigned int numBuf;
#endif
void setup() {
}
void loop() {
}
这段代码运行正常。但是如果我改变了
#define NO_PROBLEM
到
//#define NO_PROBLEM
编译器将返回以下错误:
core.a(main.cpp.o):在函数main中:C:\ Users \ user \ arduino-1.0.4-windows \ arduino-1.0.4 \ hardware \ arduino \ cores \ arduino / main.cpp :5:未定义的设置C:\ Users \ user \ arduino-1.0.4-windows \ arduino-1.0.4 \ hardware \ arduino \ cores \ arduino / main.cpp:15:未定义的循环引用
这是一些调试宏的一部分,我想只在DEBUG模式下存在一些变量,所以实际上NO_PROBLEM在我的代码中是DEBUG。
答案 0 :(得分:2)
这是IDE中与原型生成相关的错误。将IDE设置更改为详细的编译器输出。如果查看构建目录并搜索生成的.cpp文件,您将看到以下内容:
//#define NO_PROBLEM
#ifdef NO_PROBLEM
#include "Arduino.h"
void setup();
void loop();
char charBuf[16];
unsigned int numBuf;
#endif
void setup() {
}
void loop() {
}
VS
#define NO_PROBLEM
#ifdef NO_PROBLEM
#include "Arduino.h"
void setup();
void loop();
char charBuf[16];
unsigned int numBuf;
#endif
void setup() {
}
void loop() {
}
这解释了为什么编译器不会使用注释进行编译。
解决方法是确保在宏定义之前IDE可以获取某些内容,这些内容将由编译器优化。例如
namespace trick17 {};
//#define NO_PROBLEM
#ifdef NO_PROBLEM
char charBuf[16];
unsigned int numBuf;
#endif
void setup() {
}
void loop() {
}
现在生成的.cpp文件变为
#include "Arduino.h"
void setup();
void loop();
namespace trick17 {};
//#define NO_PROBLEM
#ifdef NO_PROBLEM
char charBuf[16];
unsigned int numBuf;
#endif
void setup() {
}
void loop() {
}
这可以编译好。