首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XC8警告:(107)非法的#指令"foo“

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

Stack Overflow用户
提问于 2015-09-29 02:40:41
回答 1查看 394关注 0票数 0

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

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

例如,代码

代码语言:javascript
复制
#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
{
...
}

生成警告

代码语言:javascript
复制
warning: (107) illegal # directive "INT_RDA"

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

EN

回答 1

Stack Overflow用户

发布于 2018-09-20 20:22:17

我在xc8中使用宏,但如果不只使用#ifdef,则使用#,因为它有时似乎认为未定义的'C‘宏是简单的0。另外,我从不给编译器选项赋值为0。

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

代码语言:javascript
复制
//#define COMP_OPT   1
//#define COMP_OPT   2
#define COMP_OPT   3

然后在代码中

代码语言:javascript
复制
#if ( COMP_OPT == 0 )
  #error COMP_OPT NOT DEFINED
#endif

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32829685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档