Pokud svůj kód napíšete přenosným způsobem (ne pomocí funkcí specifických pro OS/kompilátor, jako je windows.h
nebo konkrétní rozšíření kompilátoru) a používat přenosné knihovny, které by měl kompilovat jak s Visual Studio, tak s GCC.
Jde o to, že zatímco oba pracují, dělají to trochu jinak. Většinou se jedná o různá výchozí nastavení, která možná budete muset explicitně přepsat. Jako příklad:
-
Visual Studio 2017 a novější je výchozí C++14. Pomocí volby /std zadejte jiný standard.
-
GCC má výchozí nastavení, ale umožňuje vám změnit standard, který používáte pro kompilaci. Kompilace s
g++ example.cpp
používá výchozí standard (standard C++98 pro GCC před verzí 6 a C++14 pro GCC po verzi 6). Zdá se, že váš kód selže, protože používáte funkce C++11, ale váš kompilátor standardně používá starší standard.
g++ -std=c++11 example.cpp
by měly některé vaše chyby zmizet explicitním specifikováním standardu, v tomto případě standardu C++11.
Jsou to jen různé kompromisy, které kompilátoři volí. Podporovaný pouze jeden standard pravděpodobně usnadňuje podporu a opravy chyb, protože nemáte různé kombinace kompilátoru + standardní verze, které by mohly mít různé chyby. Možnost změnit standard používaný pro kompilaci usnadňuje testování, zda program funguje dobře s novým standardem nebo jaké zásadní změny musíte opravit atd...
Obecně je GCC spíše minimální a pokud chcete, aby dělal nějaké další věci, musíte jej výslovně zadat. Doporučil bych použít něco jako:
g++ -Wall -Wextra -pedantic -std=c++11 example.cpp
Pomocí -Wall
a -Wextra
dát slušnou úroveň varování začít s -pedantic
vám řekne, zda se pokoušíte použít rozšíření kompilátoru, které funguje, ale váš kód by byl méně přenosný, a v neposlední řadě byste měli vždy specifikovat standard, který chcete použít, ať už je to -std=c++11
, -std=c++14
nebo starší -std=c++98
.
Možná byste se také rádi podívali na možnost vývoje a vzdáleného ladění pomocí VS 2015 a rozšíření Linux Development.Visual C++ pro vývoj Linuxu (30. března 2016)