2017-02-04 6 views
2

Я пытаюсь заставить Visual Studio применять стандарт ANSI C при компиляции проекта, но я не могу заставить его работать. Любые советы? Я прочитал все учебники, я включил параметр/Za и назвал свой файл как .c (not .cpp). Однако следующая программа все еще успешно завершается:Enforce ANSI C Standard в Visual Studio 2015

#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') соответствует текущему стандарту ANSI C, который соответствует стандарту 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 в любом месте на этой странице.

/Za switch отключает только Microsoft конкретных расширения:

Visual C++ компилятор предлагает ряд функций, помимо тех, которые указаны либо в ANSI C89, C99 ISO или ISO C++ стандартов. Эти функции известны вместе как расширения Microsoft для C и C++. Эти расширения доступны по умолчанию и недоступны, если указан параметр/Za. Дополнительные сведения об определенных расширениях см. В разделах Microsoft Extensions to C и C++.

Он не будет отключать дополнительные расширения, отличные от Microsoft, если они являются частью официального стандарта C, который он поддерживает (например, C99).

+0

Я предполагаю, что я хочу, это эквивалент параметров GCC: -ansi -Wpedantic Можете ли вы подтвердить, что это невозможно в Visual C++? Thanks – user2527666

+0

Первая цитата относится только к библиотеке, а не к основному языку. –

 Смежные вопросы

  • Нет связанных вопросов^_^