/Zc:gotoScope
(Wymuszanie zgodności w zakresie goto)
Opcja /Zc:gotoScope
kompilatora umożliwia sprawdzanie zachowania standardowego języka C++ wokół goto
instrukcji, które przeskoczą inicjowanie zmiennych lokalnych.
Składnia
/Zc:gotoScope
[-
]
Uwagi
Opcja /Zc:gotoScope
kompilatora wymusza standardowe zachowanie języka C++ wokół goto
instrukcji, które przeskoczą inicjowanie co najmniej jednej zmiennej lokalnej. Kompilator emituje błąd C2362 we wszystkich takich przypadkach, gdy /Zc:gotoScope
jest określony. To /Zc:gotoScope-
sprawdzenie zostanie złagodne, ale kompilator nadal emituje błąd, jeśli goto
pomija inicjowanie zmiennej lokalnej, która ma nietrywialny destruktor.
Celem /Zc:gotoScope-
tej opcji jest ułatwienie migracji starszych baz kodu do bardziej zgodnego kodu. Można go użyć do pomijania niektórych błędów, dopóki nie zaktualizowano niezgodnego kodu.
Opcja kompilatora /Zc:gotoScope
jest nowa w programie Visual Studio 2022 w wersji 17.4. Opcja jest domyślnie wyłączona. Jest ona włączana automatycznie przez /permissive-
opcję (lub opcję, która oznacza /permissive-
, na przykład /std:c++20
lub /std:c++latest
). Aby jawnie włączyć sprawdzanie błędów, dodaj /Zc:gotoScope
go do wiersza polecenia kompilatora. Aby jawnie wyłączyć sprawdzanie, użyj /Zc:gotoScope-
opcji . Element /Zc:gotoScope-
musi pojawić się po /permissive-
opcji lub dowolnej opcji, która implikuje /permissive-
wartość .
Przykład
Ten przykład generuje komunikat o błędzie podczas kompilowania przy użyciu polecenia /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'
*/
Jeśli kod jest kompilowany za pomocą /Zc:gotoScope-
polecenia , kompilator nie emituje błędu.
Nawet jeśli /Zc:gotoScope-
jest określony, kompilator nadal emituje błąd, jeśli zmienna lokalna ma nietrywialny destruktor. Na przykład:
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'
*/
Aby ustawić tę opcję kompilatora w programie Visual Studio
Otwórz okno dialogowe Strony właściwości projektu. Aby uzyskać szczegółowe informacje, zobacz Set C++ compiler and build properties in Visual Studio (Ustawianie właściwości kompilatora języka C++ i kompilowania w programie Visual Studio).
Wybierz stronę Właściwości>konfiguracji C/C++>Wiersza polecenia.
W obszarze Dodatkowe opcje dodaj
/Zc:gotoScope
lub/Zc:gotoScope-
. Wybierz przycisk OK lub Zastosuj , aby zapisać zmiany.
Zobacz też
/Zc
(Zgodność)
/permissive-
/std
(Określ wersję standardową języka)