Как использовать Visual Studio в качестве IDE с работающим массивом переменной длины (VLA)? - PullRequest
1 голос
/ 19 октября 2019

В любом обычном компиляторе для C или C ++ массивы переменной длины работают нормально, но в Visual Studio Community 2019 VLA не работают. Как я могу каким-либо образом использовать Visual Studio в качестве IDE (потому что мне нравятся его функции) и при этом иметь VLA на C и C ++

Я пытался изменить используемый компилятор. Я пытался найти компилятор migwin, но не смог этого сделать. Все онлайн-учебники отличаются от того, что я вижу в последней версии Visual Studio 2019.

int n;
cin>>n;
int arr[n]; // This line gives an error

int arr [n];// Эта строка должна работать в Visual Studio 2019. Неважно, какой компилятор он использует. Просто мне нужно, чтобы эта штука работала в VS Community 2019, потому что я хочу использовать ее как IDE.

Ответы [ 3 ]

5 голосов
/ 19 октября 2019

Этот ответ о C ++.

Массив переменной длины не является стандартом ISO C ++, некоторые компиляторы принимают его как расширение. например, gcc

Автоматические массивы переменной длины разрешены в ISO C99, , и в качестве расширения GCC принимает их в режиме C90 и в C ++.


Редактировать

Такое расширение все еще может быть соответствующей реализацией, если оно не изменяет поведениеСформированная программа.


Если вы используете VLA, тогда ваш код не переносим, ​​так как другие компиляторы могут иметь или не иметь такого расширения, а тот, который теперь может перестать работать, всякий раз, когда поставщик решит отказатьсяподдержка.

Если вы не знаете размер во время компиляции и хотите использовать C ++, тогда используйте std::vector. Вы можете просто изменить свой код на:

int n;
cin>>n;
vector<int> arr(n);

Однако, если вам все-таки нужно иметь VLA, вот список поддерживающих его компиляторов: Live on godbolt (компиляторы с зеленымОтметьте поддержку)

MSVC нет в списке. Таким образом, вы можете использовать Clang в вашем VS. Вот учебник . Или еще проще: вы можете использовать встроенную поддержку VS2019 :

В Windows легко установить инструменты Clang. Просто возьмите «Clang compiler for Windows», дополнительный компонент рабочей нагрузки «Разработка на компьютере с C ++». Это установит все, что вам нужно для разработки с Clang в Windows.

VS19 clang

0 голосов
/ 20 октября 2019

VLA могут быть использованы в "CMake Project", которые являются приложениями C ++. Создайте новый «CMake Project» вместо «Консольное приложение», а затем перейдите в Project в верхнем левом меню и выберите последний вариант (настройки CMake для ProjectName). Откроется файл JSON. Под опцией Toolset, нажмите раскрывающееся меню, чтобы выбрать Clang.

Выше VS2019 16.1, Clang уже доступен. Если он недоступен, нажмите «Изменить» VS2019 в установщике Visual Studio и в «Средстве разработки C / C ++» выберите «Инструменты Clang для окон». Это установит Clang.

Поэтому главное - выбрать «Проект CMake» вместо «Консольное приложение», которое часто не отображается ни в одной инструкции. VLA теперь будут работать в файле .cpp, и Visual Studio 2019 можно будет использовать в качестве IDE для поддержки VLA.

https://devblogs.microsoft.com/cppblog/clang-llvm-support-in-visual-studio/

0 голосов
/ 20 октября 2019

В любом обычном компиляторе для C или C ++ массивы переменной длины работают нормально

В зависимости от того, как я читаю это предложение, оно либо тавтологическое, либо бессмысленное. Да, нормальные вещи работают нормально, но массивы VLA «работают» в C ++ только в том смысле, что они не определены языком.

VLA определены C и существуют в течение 20 лет. И, да, многие компиляторы C - но не компиляторы C ++ - поддерживают их. Ярким исключением является компилятор Microsoft, которого нет. Он не соответствует стандарту C99 (не говоря уже о C11, C14 или C17). Можно сказать, что они немного позади. Похоже, их позиция заключается в том, что они будут реализовывать столько языка Си, сколько им удобно в контексте компилятора С ++. Те части C, которые не являются частью C ++, не подходят.

Это ясно: поддержание актуальности компилятора C не является приоритетом для Microsoft.

Просто мне нужно, чтобы эта штука работала в VS Community 2019, потому что я хочу использовать ее как IDE.

Простая правда в том, что если выхотите работать в современном C, вы не можете использовать компилятор Microsoft. Возможно, вы сможете понять, как настроить IDE для использования компилятора GNU. Однако в какой-то момент вы можете начать спрашивать, стоит ли вам времени бороться с системой, столь враждебной вашим целям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...