Задать вопрос
@DWZ

VC++ 2010 не даёт описать переменную в середине блока — ограничение Express-версии?

C++ из Visual Studio 2010 Express. Собираю обычный проект (безо всяких afx) https://github.com/gpac/gpac/

И тут VC++ неожиданно начинает ругаться на описание переменных в середине блока. То есть, если описать переменные сразу после "{", то всё нормально. Но если между перед описанием переменной что-нибудь вычисляется, то VC++ начинает ругаться. На типы, определённые через typedef, ругается, что их использование в выражениях недопустимо, а на встроенные и вовсе, что перед описанием не стоит ";", хотя она стоит. Переношу описание переменной в начало блока - и всё в порядке.

Несколько сервис-паков поставил - не помогло.

Это что, новый стандарт? Или ограничение Express-версии? Или где-то можно что-то включить, чтобы всё стало нормально?
  • Вопрос задан
  • 142 просмотра
Подписаться 1 Простой 11 комментариев
Пригласить эксперта
Ответы на вопрос 3
Adamos
@Adamos
Возможность определять переменные в середине блока появилась в С стандарта 99.
Visual Studio 2010 поддерживает только С 98. Независимо от редакции.
Ответ написан
Комментировать
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Похоже на поведение старой-старой версии языка C. Однозначно могу сказать, что 2010 студия с переменными посреди блока работает нормально.
Ответ написан
@res2001
Developer, ex-admin
Посмотрите в настройках проекта какая версия языка используется.
Не скажу на вскидку какие версии поддерживает cl от VS2010, в VS2017 за это отвечает опция /std. В VC2017 эта опция находится в Configuration Properties -> C/C++ -> Language -> C++ Language Standard
Поведение, которое вы описываете, характерно для лохматых версий Си.
Микрософт официально не поддерживает стандарты языка Си в своем компиляторе (хотя стандарты частично реализуются), поэтому в опциях компилятора нельзя это задать.
Если задать опцию /TP, то все файлы исходного кода будут компилироваться как С++ код, не зависимо от расширения файла. По умолчанию, если расширение .c - компилируется как Си код. Возможно эта опция поможет избавиться от ошибки, но есть шанс появления других ошибок. В VC2017 эта опция находится в Configuration Properties -> C/C++ -> Advanced -> Compile As

PS: номер и текст ошибки то же было бы не плохо сюда запостить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы