Применение стандарта ANSI C в Visual Studio 2015

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

#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?


person user2527666    schedule 04.02.2017    source источник
comment
Первая программа полностью (за исключением бита void main) соответствует текущему стандарту ANSI C, который совпадает с текущим стандартом ISO C, обычно называемым C11. VS2015 не поддерживает это. Он поддерживает только один прежний стандарт, C99, которому эта программа также соответствует. Если вы хотите соответствовать какому-то другому прежнему стандарту, такому как C89/90, вам нужно понизить свой набор инструментов до чего-то вроде v100 (VS2010) или использовать другой компилятор. В MSVC нет ничего похожего на флаг -std.   -  person n. 1.8e9-where's-my-share m.    schedule 04.02.2017


Ответы (1)


Судя по этой странице, MSVC 2015 поддерживает только C99:

Соответствие C99 Visual Studio 2015 полностью реализует стандартную библиотеку C99, за исключением любых функций библиотеки, которые зависят от функций компилятора, еще не поддерживаемых компилятором Visual C++ (например, ‹tgmath.h› не реализовано).

Нигде на этой странице нет упоминания о совместимости с C89.

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

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

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

person Govind Parmar    schedule 04.02.2017
comment
Я думаю, что мне нужен эквивалент параметров GCC: -ansi -Wpedantic Можете ли вы подтвердить, что это невозможно в Visual C++? Спасибо - person user2527666; 04.02.2017
comment
Первая цитата относится только к библиотеке, а не к основному языку. - person Keith Thompson; 26.02.2018