Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Параметр /Zc:gotoScope компилятора позволяет проверять поведение C++ уровня "Стандартный" вокруг goto инструкций, которые переходют к инициализации локальных переменных.
Синтаксис
/Zc:gotoScope[-]
Замечания
Параметр /Zc:gotoScope компилятора применяет стандартное поведение C++ вокруг goto инструкций, которые переходют к инициализации одной или нескольких локальных переменных. Компилятор выдает ошибку C2362 во всех таких случаях при /Zc:gotoScope указании. Этот /Zc:gotoScope- флажок ослабляется, но компилятор по-прежнему выдает ошибку, если goto пропускается инициализация локальной переменной, которая имеет нетривиальный деструктор.
Цель /Zc:gotoScope- этого варианта заключается в том, чтобы упростить миграцию старых баз кода в более соответствующий код. Вы можете использовать его для подавления определенных ошибок, пока не обновите код, не соответствующий требованиям.
Параметр /Zc:gotoScope компилятора является новым в Visual Studio 2022 версии 17.4. Параметр отключен по умолчанию. Он включен автоматически параметром /permissive- (или параметром, который подразумевает /permissive-, например /std:c++20 или /std:c++latest). Чтобы включить проверку ошибок явным образом, добавьте /Zc:gotoScope в командную строку компилятора. Чтобы явно отключить проверку, используйте /Zc:gotoScope- этот параметр. Он /Zc:gotoScope- должен отображаться после /permissive- параметра или любого из следующих вариантов /permissive-.
Пример
Этот пример создает сообщение об ошибке при компиляции с помощью /Zc:gotoScope:
int g(int*);
bool failed(int);
int f() {
int v1;
auto result = g(&v1);
if (failed(result))
goto OnError;
int v2 = v1 + 2;
return v2;
OnError:
return -1;
}
/* Output:
t.cpp(9): error C2362: initialization of 'v2' is skipped by 'goto OnError'
*/
Если код компилируется с /Zc:gotoScope-помощью, компилятор не выдает ошибку.
Даже если /Zc:gotoScope- задано, компилятор по-прежнему выдает ошибку, если локальная переменная имеет нетривиальный деструктор. Например:
int g(int*);
bool failed(int);
class S {
public:
S(int);
~S();
int mf() const;
};
int f()
{
int v1;
auto result = g(&v1);
if (failed(result))
goto OnError;
S s(v1);
return s.mf();
OnError:
return -1;
}
/* Output:
t.cpp(17): error C2362: initialization of 's' is skipped by 'goto OnError'
*/
Установка параметра компилятора в Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
В дополнительных параметрах добавьте
/Zc:gotoScopeили/Zc:gotoScope-. Нажмите кнопку "ОК" или "Применить", чтобы сохранить изменения.
См. также
/Zc (Соответствие)
/permissive-
/std (определение стандартной версии языка)