/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++latest
etkinleş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:gotoScope
derlendiğ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. Örneğin:
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
Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için bkz . Visual Studio'da C++ derleyicisi ve derleme özelliklerini ayarlama.
Yapılandırma Özellikleri>C/C++>Komut Satırı özellik sayfasını seçin.
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)