環境
gcc 2.7.2
Visual Studio Professional 2015
前提
gcc2.7.2でコンパイルする組み込み環境向けのコードを、Windowsに移植する作業を行っています。
このプロジェクトは、今後はgcc2.7.2とMSVCの両方でビルド・動作するようにメンテナンスする必要があります。
このプロジェクトは既存コードが大量にあり、一から書き直すのは(そうしたいのは山々ですが)現実的ではありません。
ターゲット環境はとても古く、やや特殊です。上記のgccのバージョンは間違いではなくて、これでもサポートしているコンパイラの中では最新版です。ターゲット環境向けに提供されているライブラリ等の事情もあり、自前でgccをソースからコンパイルする等でバージョンアップする等も不可です。
課題
既存のコードに
C
1#warning "message"
で書かれたコンパイル時メッセージが大量にあります。用途としては(別に警告を出したいのではなく)MSVCで言う#pragma messageをやりたかっただけです。
これをそのままにするとMSVCで大量にエラーが出るので、MSVCでは#pragma messageに置き換えるのですが、gccではこれまで通り#warningとして扱いたいと思います。
既存の#warning利用箇所を書き換えること自体はOKなのですが、
- MSVCでは#pragma message
- gccでは#warning
といった感じに展開されるようにするために、どう書き換えたら良いのかが全く思いつきません。仮に可能なのであれば、プリプロセッサの領域だと思うのですが、#defineに対して#は書けないと思いますし...。
今のところは、全ての#warning利用箇所について、
C
1#if defined(_MSC_VER) 2# pragma message("message") 3#elif defined(__GNUC__) 4# warning "message" 5#endif
という感じで書き換える方向で進んでいますが、さすがにこのコードはどうかと思っています。
何かいいアイディアをお持ちの方がいらっしゃいましたら、ご教授頂ければと思います。
あなたの回答
tips
プレビュー