言語レベルでは、弾丸はありません。あなたができることは、できるだけ言語標準に固執することです。ほとんどのコンパイラには、特定のコンパイラ固有の拡張機能(Visual C++の場合、/Za
は非標準言語拡張機能を無効にする)を利用すると、警告またはエラーを発行するオプションがあります。しかしこれは完璧ではありません。なぜならコンパイラはまだ完全に標準の100%を実装していないので、厳密に準拠したコードでも移植性の問題が残ることがあります。
また、多くの日常的なコードは実際には拡張機能や未定義またはコンパイラ定義のビヘイビアを利用しており、しばしばそれを実現することはないので、完全に標準に準拠したモードでコンパイルすることは現実的ではないかもしれません。
また、規格が異なることができることに注意する必要があります。例えば、intのような型は、異なるシステム上で異なる大きさであってもよい。 WindowsはLLP64で、ほとんどのUNIX由来のOSはLP64です。
システムレベルでは、プログラマーがシステム固有のもの(たとえば、<windows.h>
または<pthreads.h>
)に依存していないかどうかを確認する完全な方法がわかりません。
すべての開発者がすべてのターゲットプラットフォームでテストビルドを簡単に実行できるようにすることをお勧めします。
http://stackoverflow.com/questions/5060034/vs2010-c-and-c-enforce-ansi-compliance-for-linux-gcc-compatibility –
これは1つのアプローチです。もう1つは、VSに加えてg ++を使ってすべてをコンパイルすることです。 – NPE
@rogerありがとう、それは私が探していたものとほぼ同じです。 – Rich