/Zc:gotoScope (Erzwingen der Konformität im Goto-Bereich)

Die /Zc:gotoScope Compileroption ermöglicht Die Überprüfung auf das Standard-C++-Verhalten bei goto Anweisungen, die über die Initialisierung lokaler Variablen springen.

Syntax

/Zc:gotoScope[-]

Hinweise

Die /Zc:gotoScope Compileroption erzwingt das C++-Standardverhalten um goto Anweisungen, die über die Initialisierung einer oder mehrerer lokaler Variablen springen. Der Compiler gibt den Fehler C2362 in allen fällen aus, wenn /Zc:gotoScope dieser angegeben wird. Die /Zc:gotoScope- Überprüfung wird entspannt, der Compiler gibt jedoch weiterhin einen Fehler aus, wenn eine goto Initialisierung einer lokalen Variable, die einen nicht trivialen Destruktor aufweist, überspringt.

Die Absicht der /Zc:gotoScope- Option besteht darin, die Migration älterer Codebasen zu einem konformeren Code zu vereinfachen. Sie können es verwenden, um bestimmte Fehler zu unterdrücken, bis Sie den nicht konformen Code aktualisiert haben.

Die /Zc:gotoScope Compileroption ist neu in Visual Studio 2022, Version 17.4. Die Option ist standardmäßig deaktiviert. Sie wird automatisch durch die /permissive- Option aktiviert (oder eine Option, die impliziert /permissive-, z /std:c++20 . B. oder /std:c++latest). Um die Fehlerüberprüfung explizit zu aktivieren, fügen Sie der Compiler-Befehlszeile hinzu /Zc:gotoScope . Verwenden Sie die /Zc:gotoScope- Option, um die Überprüfung explizit zu deaktivieren. Die /Zc:gotoScope- Muss nach der /permissive- Option oder einer beliebigen Option angezeigt werden, die impliziert /permissive-.

Beispiel

In diesem Beispiel wird beim Kompilieren eine Fehlermeldung generiert:/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'
*/

Wenn der Code kompiliert /Zc:gotoScope-wird, gibt der Compiler den Fehler nicht aus.

Selbst wenn /Zc:gotoScope- angegeben, gibt der Compiler immer noch einen Fehler aus, wenn die lokale Variable einen nicht trivialen Destruktor aufweist. Zum Beispiel:

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'
*/

So legen Sie diese Compileroption in Visual Studio fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Klicken Sie auf der Eigenschaftenseite auf Konfigurationseigenschaften>C/C++>Befehlszeile.

  3. Fügen Sie unter Zusätzliche Optionen /Zc:gotoScope oder /Zc:gotoScope- hinzu. Wählen Sie OK oder Übernehmen, um die Änderungen zu speichern.

Weitere Informationen

/Zc (Konformität)
/permissive-
/std (Standardversion für die Sprache festlegen)