Tant que vous écrivez votre code de manière portable (sans utiliser de fonctionnalités spécifiques au système d'exploitation/compilateur telles que windows.h
ou des extensions de compilateur spécifiques) et utilisez des bibliothèques portables qu'il doit compiler avec Visual Studio et GCC.
Le fait est que même s'ils travaillent tous les deux, ils le font un peu différemment. Il s'agit principalement de paramètres par défaut différents, que vous devrez peut-être remplacer explicitement. Par exemple :
-
Visual Studio 2017 et versions ultérieures utilisent par défaut C++14. Utilisez l'option /std pour spécifier une norme différente.
-
GCC a un ensemble par défaut, mais vous permet de changer le standard que vous utilisez pour la compilation. Compiler avec
g++ example.cpp
utilise le standard par défaut (standard C++98 pour GCC avant la version 6 et C++14 pour GCC après la version 6). Votre code semble échouer car vous utilisez des fonctionnalités C++11 mais votre compilateur utilise par défaut une norme plus ancienne.
g++ -std=c++11 example.cpp
devrait faire disparaître certaines de vos erreurs en spécifiant explicitement la norme, dans ce cas la norme C++11.
Ce ne sont que des compromis différents que les compilateurs choisissent. La prise en charge d'un seul standard facilite probablement le support et la correction des erreurs, car vous n'avez pas de combinaisons différentes de compilateur + version standard qui pourraient éventuellement avoir des bogues différents. Pouvoir changer le standard utilisé pour la compilation permet de tester plus facilement si un programme fonctionne bien avec un nouveau standard ou quels changements cassants vous devez corriger etc...
En général, GCC est plutôt minimal et vous le spécifiez explicitement si vous voulez qu'il fasse des choses supplémentaires. Je recommanderais d'utiliser quelque chose comme :
g++ -Wall -Wextra -pedantic -std=c++11 example.cpp
Utilisation de -Wall
et -Wextra
donner un niveau d'avertissement décent pour commencer avec -pedantic
vous indique si vous essayez d'utiliser une extension de compilateur qui fonctionne mais rendrait votre code moins portable, et enfin et surtout, vous devez toujours spécifier la norme que vous souhaitez utiliser, que ce soit -std=c++11
, -std=c++14
ou l'ancien -std=c++98
.
Vous aimerez peut-être également découvrir la possibilité de développer et de déboguer à distance à l'aide de VS 2015 et de l'extension de développement Linux. Visual C++ pour le développement Linux (30 mars 2016)