XC8 警告:(107) 非法 # 指令"foo"



我有相当多的代码编写在各种构建系统下编译(例如CCS, Visual C, Embarcadero CBuilder, Microchip XCn)。由于不同的编译器定义内联或中断例程的方式不同,因此我使用#if/#elif/#else结构来满足它们的要求。GCC预处理器文档甚至建议这是#if等的一个很好的用途。

在我的微处理器构建工具中,CCS系列编译器和XC16(基于gcc的)可以很好地处理这个问题,但是XC8坚持查看非活动的#if块并生成警告。

例如,代码

#ifdef _COMPILER_CCS
   #INT_RDA
   void RDA_ISR(void)
#elif defined (_COMPILER_MCHIP_XC16)
   void __attribute__((__interrupt__(_ISR_SPECIAL_SAVE), __auto_psv__)) _U1RXInterrupt(void)
#elif defined (_COMPILER_MCHIP_XC8)
   void vU1RXInterruptHandler(void)
#else
   #error Problem with defines
#endif
{
...
}

生成警告

warning: (107) illegal # directive "INT_RDA"

生成了数百个这样的警告,使得很难看到合法的警告和/或错误。

有没有人有关于如何使XC8闭嘴的东西,它甚至不应该解析的建议?我找不到一个标志来关闭这个警告

我在xc8中使用宏,但使用#if而不仅仅是#ifdef,因为它有时会认为未定义的'C'宏就是0。我也从来没有给编译器选项值0。

有点吓人,但我倾向于这样做:

//#define COMP_OPT   1
//#define COMP_OPT   2
#define COMP_OPT   3

然后在代码

#if ( COMP_OPT == 0 )
  #error COMP_OPT NOT DEFINED
#endif
#if ( COMP_OPT == 2 ) 
{
    // code for compile option 2 
    // blah blah
}
#endif

这样我就不会无意中生成为错误选项(或没有)编译的代码

相关内容

  • 没有找到相关文章

最新更新