移植可能な方法でコードを記述している限り (windows.h
のような OS/コンパイラ固有の機能を使用しないでください) または特定のコンパイラ拡張機能) を使用し、Visual Studio と GCC の両方でコンパイルする必要があるポータブル ライブラリを使用します。
問題は、どちらも機能しますが、少し異なる方法で機能することです。ほとんどの場合、明示的にオーバーライドする必要があるのは異なるデフォルト設定です。例:
-
Visual Studio 2017 以降のデフォルトは C++14 です。 /std オプションを使用して、別の標準を指定してください。
-
GCC にはデフォルト セットがありますが、コンパイルに使用する標準を変更できます。でコンパイル
g++ example.cpp
デフォルトの標準 (バージョン 6 より前の GCC では C++98 標準、バージョン 6 以降の GCC では C++14) を使用します。 C++11 機能を使用しているにもかかわらず、コンパイラがデフォルトで古い標準を使用しているため、コードが失敗しているようです。
g++ -std=c++11 example.cpp
標準 (この場合は C++11 標準) を明示的に指定することで、エラーの一部を解消する必要があります。
これらは、コンパイラが選択するさまざまなトレードオフです。異なるバグを持つ可能性のある異なるコンパイラと標準バージョンの組み合わせがないため、1 つの標準のみがサポートされていると、おそらくサポートとエラーの修正が容易になります。コンパイルに使用される標準を変更できると、プログラムが新しい標準でうまく機能するかどうか、または修正が必要な重大な変更などを簡単にテストできます...
一般に、GCC は最小限のものであり、追加の処理を実行する場合は明示的に指定する必要があります。次のようなものを使用することをお勧めします:
g++ -Wall -Wextra -pedantic -std=c++11 example.cpp
-Wall
の使用 そして -Wextra
-pedantic
で開始する適切な警告レベルを与える 動作するがコードの移植性が低下するコンパイラ拡張機能を使用しようとしているかどうかを示します。最後に、使用する標準を常に指定する必要があります。-std=c++11
、 -std=c++14
または古い -std=c++98
.
また、VS 2015 と Linux 開発拡張機能を使用した開発とリモート デバッグの可能性を確認することもできます。Linux 開発のための Visual C++ (2016 年 3 月 30 日)