複数のプラットフォーム (Windows、Linux、Mac OS X) 用のアプリケーションを開発しており、コードが ISO C++ 標準に準拠していることを確認したいと考えています。Linux と Mac ではフラグを使用-pedantic-errors
して、Windows ではフラグを使用して実現します/Za
(言語拡張機能を無効にします)。問題は、一部の Windows ヘッダーが C++ に準拠していないことです (そして、ばかげた方法で、重大なことは何もありません。ほとんどのエラーは'$' : unexpected in macro definition
で'__forceinline' not permitted on data declarations
あり、同様のナンセンスです)。ヘッダーを修正することは可能だと思いますか? 誰もそれを試しましたか?
3 に答える
いいえ、これは不可能です。Clang 開発者メーリング リストで STL (頭字語ではなく男) によって開始されたこの問題に関する素敵な議論については、こちらを参照してください。
そうは言っても、標準に準拠したコードを書きたい場合は、 Windows でMinGW-w64 GCCを使用することをお勧めします。これは、.NETでコンパイルできる独自の Win32 API ヘッダーを提供します-std=c++11 -pedantic -Wall -Wextra
。Clang 3.2 を提供することもできます。これは 32 ビットのみで、GCC 4.6 の libstdc++ に依存していますが、うまく機能しています。自宅のコンピューターに Clang 3.3 ビルドがありますが、libstdc++ と Clang はいくつかの可変個引数テンプレート リンクの問題で意見が一致しないため、アップロードしていません。
考えられる解決策の 1 つは、mingw/cygwin gcc を同梱の winapi ヘッダーと共に使用することです。これらは完全ではないため、新しいものを使用している場合は、Windows SDK からいくつかの宣言をコピーする必要がある場合があります。ただし、他の人が述べたように、Windows ヘッダーを使用している場合、コードは既に移植可能ではありません。