我编写了相当多的代码,可以在各种构建系统(例如 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 对它甚至不应该解析的事情闭嘴的建议?我找不到关闭此警告的标志。