/Zc:gotoScope
(Vynucení shody v oboru goto)
Možnost /Zc:gotoScope
kompilátoru umožňuje kontrolovat standardní chování jazyka C++ kolem goto
příkazů, které přeskočí přes inicializaci místních proměnných.
Syntaxe
/Zc:gotoScope
[-
]
Poznámky
Možnost kompilátoru /Zc:gotoScope
vynucuje standardní chování jazyka C++ kolem goto
příkazů, které přeskočí na inicializaci jedné nebo více místních proměnných. Kompilátor vygeneruje chybu C2362 ve všech takových případech, pokud /Zc:gotoScope
je zadán. Uvolní /Zc:gotoScope-
tuto kontrolu, ale kompilátor stále generuje chybu, pokud goto
přeskočí inicializaci místní proměnné, která má ne triviální destruktor.
Cílem této /Zc:gotoScope-
možnosti je usnadnit migraci starších základů kódu na konformnější kód. Můžete ho použít k potlačení určitých chyb, dokud neaktualizujete nevyhovující kód.
Možnost kompilátoru /Zc:gotoScope
je nová v sadě Visual Studio 2022 verze 17.4. Možnost je ve výchozím nastavení vypnutá. Tato možnost je povolena automaticky /permissive-
(nebo možností, která znamená /permissive-
, například /std:c++20
nebo /std:c++latest
). Pokud chcete kontrolu chyb povolit explicitně, přidejte /Zc:gotoScope
ji do příkazového řádku kompilátoru. Pokud chcete tuto kontrolu explicitně zakázat, použijte tuto /Zc:gotoScope-
možnost. Musí /Zc:gotoScope-
se zobrazit za /permissive-
možností nebo jakoukoli z možností, které znamenají /permissive-
.
Příklad
Tato ukázka vygeneruje chybovou zprávu při kompilaci pomocí /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'
*/
Pokud je kód zkompilován /Zc:gotoScope-
, kompilátor nevysílá chybu.
I když /Zc:gotoScope-
je zadán, kompilátor stále generuje chybu, pokud má místní proměnná ne triviální destruktor. Příklad:
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'
*/
Nastavení této možnosti kompilátoru v sadě Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností příkazového řádku C/C++>Vlastnosti>konfigurace.
V dalších možnostech přidejte
/Zc:gotoScope
nebo/Zc:gotoScope-
. Změny uložíte kliknutím na OK nebo Použít .
Viz také
/Zc
(Shoda)
/permissive-
/std
(Určení standardní verze jazyka)