web-dev-qa-db-fra.com

Existe-t-il une option pour basculer entre les normes C99 et C11 C dans Visual Studio?

Je suis nouveau dans Visual Studio Environment et j'utilise VS2017 Pro. Je voulais écrire un programme simple en C et compilé avec les deux c99 et c11 normes. Dans Visual Studio, je ne pouvais trouver que des commutateurs de compilateur pour les normes C++ uniquement.

Comment pouvons-nous dire à l'environnement de studio visuel que nous voulons compiler le code actuel avec c99 et c11 [~ # ~] c [~ # ~] normes.

Compiler Switch

Standard Switch

14
user9411335

Les seuls "modes" pris en charge par Visual C++ sont: /std:c++14 mode pour la conformité C++ 14 (par défaut), /std:c++17 mode pour le support C++ 17 qui n'est pas tout à fait complet à partir de VS 2017 (15.6). Il y a aussi /std:c++latest mode qui, à un moment donné, inclura des choses en C++ 20. Tous ces éléments doivent être combinés avec /permissive- pour une meilleure conformité.

Pour respecter la conformité à la bibliothèque standard C++ 11, Visual C++ doit prendre en charge la bibliothèque standard C99, ce n'est pas la même chose que la prise en charge de la conformité au langage C99.

À un moment donné pour répondre aux exigences de la bibliothèque standard C++ 17, Visual C++ devra prendre en charge la bibliothèque standard C11 et là encore ce n'est pas la même chose que la conformité au langage C11.

Voir Conformité aux normes C++ de Microsoft et Fonctionnalités STL C++ 11/14, correctifs et changements de rupture dans VS 201

Il y a un fil de commentaires dans le post MSVC: le meilleur choix pour Windows où un chef de projet Visual C++ se pose la question de la vraie conformité 'C11'.

Salut Onur,

La conformité C est sur notre radar bien que nous nous concentrions d'abord sur la conformité C++.
Nous avons effectué des travaux dans VS 2013 sur la conformité C, mais nous ne l'avons pas beaucoup publicisé. Ce travail comprenait:
- C99 _Bool
- Littéraux composés C99
- Initialiseurs désignés C99
- Déclarations de variables C99
Nous approchons de la fin de notre travail de conformité C++. Un des derniers éléments est un préprocesseur conforme: une fonctionnalité partagée par C et C++. Le préprocesseur marquera le début de notre Push de conformité C ainsi que la fin de notre travail de conformité C++ 98/11/14.

Andrew

13
Chuck Walbourn

Visual Studio est principalement un compilateur C++. En "mode C", il suit une ancienne norme C de 1990.

Vers 2013-2015, ils ont fait des efforts pour prendre en charge non pas la norme C actuelle, mais la norme C précédente de 1999 ("C99"), quelque 16 ans après sa publication. Cependant, les travaux pour se conformer à cette norme ne sont pas terminés.

Je crois que le compilateur prend également en charge quelques fonctionnalités sélectionnées du langage C actuel ("C11") telles que la bibliothèque facultative de vérification des limites. Cette norme est disponible depuis 7 ans mais n'est pas entièrement prise en charge.

Donc, si vous avez besoin d'un compilateur en langage C conforme, vous devriez chercher d'autres alternatives.

5
Lundin