ARMC6忽略预处理器指令 我用ARM编译器V611编译了一些C++。作为这段代码的一部分,我使用以下预处理器指令有条件地包括一个文件。这没什么不寻常的 #if BOARD == TP_EARHART_V1_0_0 #include "LorawanTP.h" #endif
我的问题是,文件被包括在内,因此,导致了大量错误。我不知道为什么预处理器指令似乎被忽略了 现在,我想到的第一件事是:“很明显,你在其他地方重新定义了BOARD宏,它实际上等于ARMC6忽略预处理器指令 我用ARM编译器V611编译了一些C++。作为这段代码的一部分,我使用以下预处理器指令有条件地包括一个文件。这没什么不寻常的 #if BOARD == TP_EARHART_V1_0_0 #include "LorawanTP.h" #endif,c++,arm,c-preprocessor,C++,Arm,C Preprocessor,我的问题是,文件被包括在内,因此,导致了大量错误。我不知道为什么预处理器指令似乎被忽略了 现在,我想到的第一件事是:“很明显,你在其他地方重新定义了BOARD宏,它实际上等于TP\u EARHART\u V1\u 0\u 0”。不幸的是,事实并非如此,我已通过以下方式验证了这一点: #define STRING2(x) #x #define STRING(x) STRING2(x) #pragma message "BOARD = " STRING(BOARD) #if BOARD ==TP_
TP\u EARHART\u V1\u 0\u 0
”。不幸的是,事实并非如此,我已通过以下方式验证了这一点:
#define STRING2(x) #x
#define STRING(x) STRING2(x)
#pragma message "BOARD = " STRING(BOARD)
#if BOARD ==TP_EARHART_V1_0_0
#include "LorawanTP.h"
#endif
结果如下:
[Warning] node_flow.h@23,9: BOARD = WRIGHT_V1_0_0 [-W#pragma-messages]
我真的不太确定现在该去哪里找。非常感谢您的任何见解
我应该指出,我也尝试了以下几点,但都没有成功:
#if defined BOARD && (BOARD == TP_EARHART_V1_0_0)
我能想到的最接近的是这样的东西 宏:
#define BOARD_TYPE(board) \
((defined( BOARD_ ## board) && (BOARD_ ## board)) ? 1 : 0)
#endif
然后在代码文件中:
#if BOARD_TYPE(TP_EARHART_V1_0_0)
#include "LorawanTP.h"
#endif
然后在预处理器或其他包含文件集中:
BOARD_TP_EARHART_V1_0_0 = 1
可能相关:@formerlyknownas463035818谢谢。我的问题没有说明,但我确实尝试了
#ifdef BOARD&&(BOARD==xxx
没有用,我将更新以反映这一点。问题是TP_EARHART_V1_0_0
和WRIGHT_V1_0_0
可能没有定义,因此预处理器在平等性测试中使用0作为值,正如@formerlyknownas_463035818所指出的问题所解释的那样。@a程序员但TP_EARHART_V1_0
andWRIGHT_V1_0_0
只是BOARD
的可能值。如果没有定义BOARD
,那么我的#pragma消息…
会显示,尽管如此,是吗?还是我完全误解了预处理器的工作方式?BOARD
被扩展到WRIGHT_V1_0_0
,然后扩展到0
。这与TP\u EARHART\u V1\u 0\u 0
的扩展相比,后者也是0
。