2017-02-04 14 views
2

プロジェクトをコンパイルするときにVisual Studioを使用してANSI C標準を適用しようとしていますが、動作させることができません。 ヒント? 私はすべてのチュートリアルを読んで、私は/ Zaオプションを有効にし、自分のファイルを.c(.cppではなく)という名前にしました。ただし、次のプログラムは正常に構築されます。Visual Studio 2015でANSI C標準を適用します。

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

ただし、このようにはなりません。これは、ANSI C標準を尊重するために、このようでなければならないであろう。

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

私はGCCのオプション「-ansi」と「-Wpedantic」と同等のものをしたいと思います。 これはVSでも可能ですか?

+1

最初のプログラム( 'void main'ビットを除く)は、現行のISO c標準(通常C11と同じ)に準拠しています。 VS2015はサポートしていません。このプログラムが準拠している*旧*標準のC99のみをサポートしています。 C89/90のような他の以前の標準に準拠したい場合は、ツールセットをv100(VS2010)のようなものにダウングレードするか、別のコンパイラを使用する必要があります。 MSVCの '-std'フラグのようなものはありません。 –

答えて

3

this pageから、MSVC 2015のみサポートC99に思える:

コンパイラに依存するライブラリ機能の例外はまだサポートされていない機能を持つC99準拠のVisual Studio 2015は、完全に、C99標準ライブラリを実装Visual C++コンパイラによって(たとえば、<tgmath.h>は実装されていません)。

そのページのどこにでもC89の互換性に関する記述はありません。

のVisual C++コンパイラがANSI C89、ISO C99、またはISO C++標準規格のいずれかで指定されたもの以外の多数の機能を提供しています:

/Za switchマイクロソフト特定の拡張機能を無効にします。これらの機能は、CおよびC++のMicrosoft拡張機能と総称されています。これらの拡張子は既定で使用でき、/ Zaオプションが指定されている場合は使用できません。特定の拡張機能の詳細については、「CおよびC++へのMicrosoft拡張機能」を参照してください。

(C99などの)サポートする公式のC標準の一部である場合、Microsoft以外の特定の拡張機能は無効になりません。

+0

私はGCCのオプションと同等のものがほしいと思います: -ansi -Wpedantic これはVisual C++では不可能であることを確認できますか? ありがとう – user2527666

+0

最初の引用は、コア言語ではなくライブラリのみを参照します。 –

関連する問題