/Zc:gotoScope
(Appliquer la conformité dans l’étendue goto)
L’option /Zc:gotoScope
du compilateur active les vérifications du 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é. Le /Zc:gotoScope-
relâche cette vérification, mais le compilateur émet toujours une erreur si une goto
initialisation ignore 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 explicitement la vérification des erreurs, ajoutez-y /Zc:gotoScope
la ligne de commande du compilateur. Pour désactiver explicitement la vérification, 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 options supplémentaires, 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)