/Zc:gotoScope
(Appliquer la conformité dans l’étendue goto)
L’option /Zc:gotoScope
du compilateur active les case activée pour le comportement C++ Standard autour goto
des instructions qui sautent sur l’initialisation des variables locales.
Syntaxe
/Zc:gotoScope
[-
]
Notes
L’option /Zc:gotoScope
du compilateur applique le comportement C++ Standard autour goto
des instructions qui sautent sur l’initialisation d’une ou plusieurs variables locales. Le compilateur émet l’erreur C2362 dans tous les cas de ce type lorsqu’il /Zc:gotoScope
est spécifié. La /Zc:gotoScope-
détente de cette case activée, mais le compilateur émet toujours une erreur si une goto
initialisation ignorée d’une variable locale qui a un destructeur non trivial.
L’objectif de l’option /Zc:gotoScope-
est de faciliter la migration de bases de code plus anciennes vers du code plus conforme. Vous pouvez l’utiliser pour supprimer certaines erreurs jusqu’à ce que vous ayez mis à jour le code non conforme.
L’option /Zc:gotoScope
du compilateur est nouvelle dans Visual Studio 2022 version 17.4. L’option est désactivée par défaut. Elle est activée automatiquement par l’option /permissive-
(ou une option qui implique /permissive-
, par /std:c++20
exemple ou /std:c++latest
). Pour activer l’erreur case activée explicitement, ajoutez-y /Zc:gotoScope
la ligne de commande du compilateur. Pour désactiver explicitement le case activée, utilisez l’option/Zc:gotoScope-
. L’option /Zc:gotoScope-
doit apparaître après l’option /permissive-
ou toute option qui implique /permissive-
.
Exemple
Cet exemple génère un message d’erreur lors de la compilation à l’aide /Zc:gotoScope
de :
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'
*/
Si le code est compilé avec /Zc:gotoScope-
, le compilateur n’émet pas l’erreur.
Même lorsqu’il /Zc:gotoScope-
est spécifié, le compilateur émet toujours une erreur si la variable locale a un destructeur non trivial. Par exemple :
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'
*/
Pour définir cette option de compilateur dans Visual Studio
Ouvrez la boîte de dialogue Pages de propriété du projet. Pour plus d’informations, consultez Définir le compilateur C++ et les propriétés de build dans Visual Studio.
Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.
Dans d’autres options, ajoutez
/Zc:gotoScope
ou/Zc:gotoScope-
. Choisissez OK ou Appliquer pour enregistrer vos modifications.
Voir aussi
/Zc
(Conformité)
/permissive-
/std
(Spécifier la version du standard du langage)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour