/Zc:gotoScope
(Applicare la conformità nell'ambito goto)
L'opzione /Zc:gotoScope
del compilatore abilita i controlli del comportamento C++ standard per goto
le istruzioni che passano all'inizializzazione delle variabili locali.
Sintassi
/Zc:gotoScope
[-
]
Osservazioni:
L'opzione /Zc:gotoScope
del compilatore applica il comportamento standard C++ per goto
le istruzioni che passano all'inizializzazione di una o più variabili locali. Il compilatore genera l'errore C2362 in tutti questi casi quando /Zc:gotoScope
viene specificato. Questo /Zc:gotoScope-
controllo si riduce, ma il compilatore genera comunque un errore se goto
ignora l'inizializzazione di una variabile locale con un distruttore non semplice.
Lo scopo dell'opzione /Zc:gotoScope-
è semplificare la migrazione di codebase meno recenti a codice più conforme. È possibile usarlo per eliminare determinati errori fino a quando non è stato aggiornato il codice non conforme.
L'opzione /Zc:gotoScope
del compilatore è una novità di Visual Studio 2022 versione 17.4. L'opzione è disattivata per impostazione predefinita. Viene abilitata automaticamente dall'opzione /permissive-
(o un'opzione che implica /permissive-
, ad esempio /std:c++20
o /std:c++latest
). Per abilitare il controllo degli errori in modo esplicito, aggiungere /Zc:gotoScope
alla riga di comando del compilatore. Per disabilitare in modo esplicito il controllo, usare l'opzione /Zc:gotoScope-
. Deve /Zc:gotoScope-
essere visualizzato dopo l'opzione /permissive-
o qualsiasi opzione che implica /permissive-
.
Esempio
Questo esempio genera un messaggio di errore durante la compilazione con /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'
*/
Se il codice viene compilato con /Zc:gotoScope-
, il compilatore non genera l'errore.
Anche quando /Zc:gotoScope-
viene specificato, il compilatore genera comunque un errore se la variabile locale ha un distruttore non semplice. Ad esempio:
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'
*/
Per impostare questa opzione del compilatore in Visual Studio
Aprire la finestra di dialogo Pagine delle proprietà del progetto. Per informazioni dettagliate, vedere Impostare il compilatore e le proprietà di compilazione.
Selezionare la pagina delle proprietà Proprietà di configurazione>C/C++>Riga di comando.
In Opzioni aggiuntive aggiungere
/Zc:gotoScope
o/Zc:gotoScope-
. Scegliere OK o Applica per salvare le modifiche.
Vedi anche
/Zc
(Conformità)
/permissive-
/std
(Specificare la versione standard della lingua)