Existe-t-il un moyen de savoir si je compile sous une version spécifique de Microsoft Visual Studio ?
Désolé, mais pourquoi Microsoft ne rend pas cette information facile à trouver ? Ce poste est très utile mais ne devrait pas être obligatoire.
Existe-t-il un moyen de savoir si je compile sous une version spécifique de Microsoft Visual Studio ?
_MSC_VER
et éventuellement _MSC_FULL_VER
est ce dont vous avez besoin. Vous pouvez également examiner visualc.hpp dans toute installation récente de boost pour quelques exemples d'utilisation.
Voici quelques valeurs pour les versions les plus récentes du compilateur :
MSVC++ 14.24 _MSC_VER == 1924 (Visual Studio 2019 version 16.4)
MSVC++ 14.23 _MSC_VER == 1923 (Visual Studio 2019 version 16.3)
MSVC++ 14.22 _MSC_VER == 1922 (Visual Studio 2019 version 16.2)
MSVC++ 14.21 _MSC_VER == 1921 (Visual Studio 2019 version 16.1)
MSVC++ 14.2 _MSC_VER == 1920 (Visual Studio 2019 version 16.0)
MSVC++ 14.16 _MSC_VER == 1916 (Visual Studio 2017 version 15.9)
MSVC++ 14.15 _MSC_VER == 1915 (Visual Studio 2017 version 15.8)
MSVC++ 14.14 _MSC_VER == 1914 (Visual Studio 2017 version 15.7)
MSVC++ 14.13 _MSC_VER == 1913 (Visual Studio 2017 version 15.6)
MSVC++ 14.12 _MSC_VER == 1912 (Visual Studio 2017 version 15.5)
MSVC++ 14.11 _MSC_VER == 1911 (Visual Studio 2017 version 15.3)
MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017 version 15.0)
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015 version 14.0)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013 version 12.0)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012 version 11.0)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010 version 10.0)
MSVC++ 9.0 _MSC_FULL_VER == 150030729 (Visual Studio 2008, SP1)
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008 version 9.0)
MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005 version 8.0)
MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio .NET 2003 version 7.1)
MSVC++ 7.0 _MSC_VER == 1300 (Visual Studio .NET 2002 version 7.0)
MSVC++ 6.0 _MSC_VER == 1200 (Visual Studio 6.0 version 6.0)
MSVC++ 5.0 _MSC_VER == 1100 (Visual Studio 97 version 5.0)
Le numéro de version ci-dessus fait bien sûr référence à la version majeure de votre Visual Studio que vous voyez dans la boîte "about", et non à l'année dans le nom. Une liste complète peut être trouvée aquí . Depuis peu Visual Studio commencera à mettre à jour ses plages de manière monotone, ce qui signifie que vous devez vérifier les plages plutôt que les valeurs exactes du compilateur.
cl.exe /?
donnera un indice de la version utilisée, par exemple :
c:\program files (x86)\microsoft visual studio 11.0\vc\bin>cl /?
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x86
.....
Désolé, mais pourquoi Microsoft ne rend pas cette information facile à trouver ? Ce poste est très utile mais ne devrait pas être obligatoire.
Il semble que cette macro ne reflète pas la version du compilateur utilisée par le projet. Par exemple, si vous ouvrez un projet VS2010 dans une version plus récente sans mettre à jour le projet, cette macro ne reflète pas le compilateur utilisé - seulement la version de l'IDE.
Je suis en train de compiler libFLAC avec d'autres bibliothèques. Elles nécessitent que la compilation soit faite en utilisant toolset v100. Il y a un code #if defined _MSC_VER # if _MSC_VER >= 1800 # include <inttypes.h>
. inttypes.h ne peut être trouvé, cependant. Très étrange
Oui, _MSC_VER est la macro qui vous donnera la version du compilateur. Les dernières versions de Visual C++ ont été de la forme suivante <compiler-major-version>.00.<build-number>
où 00 est le numéro mineur. Donc _MSC_VER
évaluera à <major-version><minor-version>
.
Vous pouvez utiliser un code comme celui-ci :
#if (_MSC_VER == 1500)
// ... Do VC9/Visual Studio 2008 specific stuff
#elif (_MSC_VER == 1600)
// ... Do VC10/Visual Studio 2010 specific stuff
#elif (_MSC_VER == 1700)
// ... Do VC11/Visual Studio 2012 specific stuff
#endif
Il semble que les mises à jour entre les versions successives du compilateur, n'ont pas modifié l'adresse de l'utilisateur. compiler-minor-version
Le code suivant n'est donc pas nécessaire :
#if (_MSC_VER >= 1500 && _MSC_VER <= 1600)
// ... Do VC9/Visual Studio 2008 specific stuff
#endif
L'accès à des informations plus détaillées sur les versions (telles que le numéro de compilation du compilateur) peut être obtenu en utilisant d'autres variables de préprocesseur intégrées. aquí .
@José, il est vrai que nous pourrions simplifier la vérification pour VC++ 9 avec _MSC_VER_ == 1500
Cependant, si MS, a modifié le _MSC_VER
avec les mises à jour de compilateurs, les Service Packs, etc. (je ne pense pas qu'ils l'aient jamais fait), alors la == 1500
Le chèque pourrait se briser. C'est pourquoi je l'ai codé de cette façon.
__MSC_VER évaluent les composantes des numéros majeurs et mineurs de la version du compilateur. Cela ne changera pas avec une mise à jour, il y a _MSC_FULL_VER qui inclut aussi le numéro de build, mais je n'ai jamais eu besoin de l'utiliser.
_MSC_VER doit être défini comme un numéro de version spécifique. Vous pouvez soit #ifdef dessus, soit utiliser la définition actuelle et faire un test d'exécution. (Si pour une raison quelconque vous vouliez exécuter un code différent en fonction du compilateur avec lequel il a été compilé ? Oui, vous cherchiez probablement le #ifdef. :))
L'utilisation de macros spécifiques à Visual Studio permet d'obtenir plus d'informations. aquí .
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.