Есть ли возможность переключаться между стандартами C99 и C11 C в Visual Studio?

Я новичок в среде Visual Studio и использую VS2017 Pro. Я хотел написать простую программу на C и скомпилировать как стандарты c99, так и c11. В Visual Studio я мог найти только переключатели компилятора только для стандартов C++.

Как мы можем сообщить среде Visual Studio, что мы хотим скомпилировать текущий код в соответствии со стандартами c99 и c11 C.

Compiler Switch

Standard Switch

Ответы

Ответ 1

Единственные "режимы", поддерживаемые Visual C++: режим /std:c++14 для соответствия C++ 14 (по умолчанию), режим /std:c++17 для поддержки C++ 17, который не совсем завершен по сравнению с VS 2017 (15.6), Существует также режим /std:c++latest, который в будущем будет включать в себя элементы C++ 20. Все это должно быть объединено с /permissive- для улучшения соответствия.

Чтобы соответствовать стандарту C++ 11 Стандартной библиотеки, Visual C++ должен поддерживать Стандартную библиотеку C99, что не то же самое, что поддержка соответствия языку C99.

В какой-то момент, чтобы соответствовать требованиям C++ 17 Стандартной библиотеки, Visual C++ должен будет поддерживать Стандартную библиотеку C11 и, опять же, это не то же самое, что соответствие языку C11.

См. C++ Соответствие стандартам от Microsoft и C++ 11/14 Функции, исправления и критические изменения STL в VS 2013

В сообщении есть ветка комментариев MSVC: лучший выбор для Windows, где менеджер проекта Visual C++ берет на себя вопрос истинного соответствия "C11".

Hi Onur,

Соответствие C находится на нашем радаре, хотя вначале мы фокусировались на соответствии C++.
Мы проделали некоторую работу в VS 2013 по соответствию C, хотя мы не публиковали это много. Эта работа включает в себя:
- C99 _Bool
- C99 составные литералы
- C99 назначенные инициализаторы
- объявления переменных C99
Мы приближались к концу нашей C++ работы по согласованию. Один из последних предметов является соответствующим препроцессором: функция, общая для C и C++. Препроцессор также отметит начало нашего C-соответствия как конец нашей C++ 98/11/14 работы по согласованию.

Андрей

Ответ 2

Visual Studio в основном является компилятором C++. В режиме "C" он соответствует древнему стандарту C с 1990 года.

Примерно в 2013-2015 годах они приложили определенные усилия для поддержки не нынешнего, а предыдущего стандарта C с 1999 года ("C99"), примерно через 16 лет после его выпуска. Однако работа по выполнению этого стандарта не была завершена.

Я считаю, что компилятор также поддерживает несколько избранных функций текущего языка C ("C11"), например, дополнительную библиотеку проверки границ. Этот стандарт доступен в течение 7 лет, но не полностью поддерживается.

Поэтому, если вам нужен соответствующий компилятор языка C, вы должны искать другие альтернативы.