Partager via


/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:gotoScopede :

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

  1. 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.

  2. Sélectionnez la page de propriétés Propriétés de configuration>C/C++>Ligne de commande.

  3. 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)