Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kaçının
goto(es.76)
C++ Temel Yönergeleri:
ES.76: Goto'yu kullanmaktan kaçının
kullanımı goto yaygın olarak tehlikeli ve hataya eğilimli bir uygulama olarak kabul edilir. Yalnızca oluşturulan kodda kabul edilebilir, örneğin bir dil bilgisi tarafından oluşturulan ayrıştırıcıda. Yönergeler Destek Kitaplığı tarafından sağlanan modern C++ özellikleri ve yardımcı programları ile, tamamen kaçınmak goto kolay olmalıdır.
Açıklamalar
- Bu kural, hiçbir zaman kullanılmayan ve derleyici tarafından yoksayılan şablon kodu dışında, geçersiz kodda gerçekleşse bile herhangi bir örneğinde
gotouyarır. - Bir makro içerdiğinde
gotouyarılar çarpabilir. Geçerli raporlama mekanizmaları, bu tür bir makroların genişletildiği tüm örnekleri işaret eder. Genellikle makro değiştirilerek veya daha sürdürülebilir mekanizmalar için kullanımından kaçınılarak tek bir yerde düzeltilebilir.
Kod analizi adı: NO_GOTO
Örnek
Makroda 'goto clean-up'
#define ENSURE(E, L) if (!(E)) goto L;
void poll(connection &c)
{
ENSURE(c.open(), end); // C26438
while (c.wait())
{
connection::header h{};
connection::signature s{};
ENSURE(c.read_header(h), end); // C26438
ENSURE(c.read_signature(s), end); // C26438
// ...
}
end:
c.close();
}
Makrodaki 'goto clean-up' yerine gsl::finally
void poll(connection &c)
{
auto end = gsl::finally([&c] { c.close(); });
if (!c.open())
return;
while (c.wait())
{
connection::header h{};
connection::signature s{};
if(!c.read_header(h))
return;
if(!c.read_signature(s))
return;
// ...
}
}