さまざまなビルド システム (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 を黙らせる方法について提案がある人はいますか? この警告をオフにするフラグが見つかりません。