Solange Sie Ihren Code portabel schreiben (ohne Betriebssystem-/Compiler-spezifische Funktionen wie windows.h
oder spezifische Compiler-Erweiterungen) und portable Bibliotheken verwenden, die es sowohl mit Visual Studio als auch mit GCC kompilieren sollte.
Die Sache ist, dass sie zwar beide funktionieren, aber ein wenig anders. Meistens sind es andere Standardeinstellungen, die Sie möglicherweise explizit überschreiben müssen. Als Beispiel:
-
Visual Studio 2017 und höher verwendet standardmäßig C++14. Verwenden Sie die Option /std, um einen anderen Standard anzugeben.
-
GCC hat einen Standardsatz, ermöglicht es Ihnen jedoch, den Standard zu ändern, den Sie für die Kompilierung verwenden. Kompilieren mit
g++ example.cpp
verwendet den Standardstandard (C++98-Standard für GCC vor Version 6 und C++14 für GCC nach Version 6). Ihr Code scheint fehlzuschlagen, weil Sie C++11-Funktionen verwenden, Ihr Compiler jedoch standardmäßig einen älteren Standard verwendet.
g++ -std=c++11 example.cpp
sollte einige Ihrer Fehler verschwinden lassen, indem Sie den Standard explizit angeben, in diesem Fall den C++11-Standard.
Dies sind nur andere Kompromisse, die die Compiler wählen. Dass nur ein Standard unterstützt wird, erleichtert wahrscheinlich den Support und die Behebung von Fehlern, da Sie keine unterschiedlichen Kombinationen aus Compiler und Standardversion haben, die möglicherweise unterschiedliche Fehler haben könnten. In der Lage zu sein, den für die Kompilierung verwendeten Standard zu ändern, macht es einfacher zu testen, ob ein Programm mit einem neuen Standard gut funktioniert oder welche bahnbrechenden Änderungen behoben werden müssen usw...
Im Allgemeinen ist GCC eher minimal und Sie müssen es explizit angeben, wenn Sie möchten, dass es einige zusätzliche Dinge tut. Ich würde empfehlen, so etwas zu verwenden:
g++ -Wall -Wextra -pedantic -std=c++11 example.cpp
Mit -Wall
und -Wextra
Geben Sie eine anständige Warnstufe, um mit -pedantic
zu beginnen sagt Ihnen, ob Sie versuchen, eine Compiler-Erweiterung zu verwenden, die funktioniert, aber Ihren Code weniger portabel machen würde, und nicht zuletzt sollten Sie immer den Standard angeben, den Sie verwenden möchten, sei es -std=c++11
, -std=c++14
oder das ältere -std=c++98
.
Vielleicht möchten Sie auch die Möglichkeiten zum Entwickeln und Remotedebuggen mit VS 2015 und der Linux-Entwicklungserweiterung ausprobieren.Visual C++ für die Linux-Entwicklung (30. März 2016)