/Zc:gotoScope (Goto kapsamında uyumluluğu zorunlu kılma)

Derleyici seçeneği, /Zc:gotoScope yerel değişkenlerin başlatılmasının üzerinden atlayan deyimler etrafında goto Standart C++ davranışı denetimlerini etkinleştirir.

Sözdizimi

/Zc:gotoScope[-]

Açıklamalar

Derleyici seçeneği, /Zc:gotoScope bir veya daha fazla yerel değişkenin başlatılmasının üzerinden atlayan deyimler etrafında goto C++ Standart davranışını zorlar. Derleyici, belirtildiğinde bu tür tüm durumlarda /Zc:gotoScope C2362 hatasını yayar. bu /Zc:gotoScope- denetimi rahatlatır, ancak önemsiz olmayan bir yıkıcısı olan bir yerel değişkenin başlatılması atlanırsa goto derleyici yine de bir hata yayar.

Seçeneğinin /Zc:gotoScope- amacı, eski kod temellerinin daha uyumlu koda geçişini kolaylaştırmaya yardımcı olmaktır. Uyumsuz kodu güncelleştirene kadar belirli hataları engellemek için bunu kullanabilirsiniz.

/Zc:gotoScope Derleyici seçeneği Visual Studio 2022 sürüm 17.4'te yenidir. Seçenek varsayılan olarak kapalıdır. Seçeneği (veya veya gibi) anlamına /permissive-gelen bir seçenek tarafından otomatik /permissive- olarak /std:c++20/std:c++latestetkinleştirilir. Hata denetimini açıkça etkinleştirmek için derleyici komut satırına ekleyin /Zc:gotoScope . Denetimi açıkça devre dışı bırakmak için seçeneğini kullanın /Zc:gotoScope- . seçeneğinden /Zc:gotoScope-/permissive- veya ima /permissive-eden herhangi bir seçenekte görünmelidir.

Örnek

Bu örnek kullanılarak /Zc:gotoScopederlendiğinde bir hata iletisi oluşturur:

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

Kod ile /Zc:gotoScope-derlenmişse, derleyici hatayı yaymaz.

Belirtildiğinde /Zc:gotoScope- bile yerel değişkenin önemsiz olmayan bir yıkıcısı varsa derleyici yine de bir hata yayar. Örnek:

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

Visual Studio'da bu derleyici seçeneğini ayarlamak için

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.

  2. Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.

  3. Ek seçenekler'de veya /Zc:gotoScope-ekleyin/Zc:gotoScope. Değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.

Ayrıca bkz.

/Zc (Uyumluluk)
/permissive-
/std (Dil standart sürümünü belirtin)