2017-02-04 1 views
2

J'essaie d'obtenir Visual Studio pour appliquer la norme ANSI C lors de la compilation d'un projet, mais je n'arrive pas à le faire fonctionner. Des astuces? J'ai lu tous les tutoriels, j'ai activé l'option/Za, et nommé mon fichier comme .c (pas .cpp). Toutefois, le programme suivant se construit encore avec succès:Appliquer la norme ANSI C dans Visual Studio 2015

#include <stdio.h> 
void main(void) 
{ 
    for (int i = 0; i < 10; i++) 
    { 
    } 
    int f = 0; 
} 

Mais il ne devrait pas. Il devrait être comme celui-ci à respecter la norme ANSI C:

#include <stdio.h> 
void main(void) 
{ 
    int i; 
    int f = 0; 
    for (i = 0; i < 10; i++) 
    { 
    } 
} 

je voudrais l'équivalent des options du CCG « -ansi » et « -Wpedantic ». Est-ce encore possible en VS?

+1

Le premier programme entièrement (à l'exception du bit «void main») est conforme à la norme ANSI C actuelle qui est la même que la norme ISO c courante, communément appelée C11. VS2015 ne le supporte pas. Il ne prend en charge qu'une norme * ancienne *, C99, à laquelle ce programme est également conforme. Si vous souhaitez vous conformer à d'autres normes comme C89/90, vous devez rétrograder votre jeu d'outils à quelque chose comme v100 (VS2010) ou utiliser un autre compilateur. Il n'y a rien comme le drapeau '-std' dans MSVC. –

Répondre

3

De this page, MSVC 2015 semble soutenir que C99:

C99 Conformance Visual Studio 2015 met pleinement en œuvre la bibliothèque standard C99, à l'exception de toutes les fonctions de bibliothèque qui dépendent du compilateur les fonctions non encore pris en charge par le compilateur Visual C++ (par exemple, <tgmath.h> n'est pas implémentée).

Il n'y a aucune mention de compatibilité C89 n'importe où sur cette page.

Le /Za switch désactive uniquement extensions Microsoft spécifiques:

Le compilateur Visual C++ offre un certain nombre de fonctions au-delà de celles qui sont spécifiées soit dans la norme ANSI C89, C99 ISO, ou les normes ISO C++. Ces fonctionnalités sont connues collectivement comme des extensions Microsoft à C et C++. Ces extensions sont disponibles par défaut et non disponibles lorsque l'option/Za est spécifiée. Pour plus d'informations sur les extensions spécifiques, consultez Extensions Microsoft vers C et C++.

Il ne désactivera pas les extensions non-Microsoft spécifiques si elles font partie d'un standard C officiel qu'il supporte (comme C99).

+0

Je suppose que ce que je veux est l'équivalent des options GCC: -ansi -Wpedantic Pouvez-vous confirmer que ce n'est pas possible dans Visual C++? Merci – user2527666

+0

La première citation fait uniquement référence à la bibliothèque, pas à la langue principale. –