Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Hindari
goto(es.76)
Pedoman Inti C++:
ES.76: Hindari goto
Penggunaan goto secara luas dianggap sebagai praktik berbahaya dan rawan kesalahan. Ini hanya dapat diterima dalam kode yang dihasilkan, seperti dalam pengurai yang dihasilkan dari tata bahasa. Dengan fitur dan utilitas C++ modern yang disediakan oleh Pustaka Dukungan Pedoman, harus mudah dihindari goto sama sekali.
Keterangan
- Aturan ini memperingatkan pada setiap kemunculan
goto, bahkan jika terjadi dalam kode mati, kecuali kode templat yang tidak pernah digunakan dan sebagainya diabaikan oleh pengkompilasi. - Peringatan dapat mengalikan ketika makro berisi
goto. Mekanisme pelaporan saat ini menunjuk ke semua instans di mana makro tersebut diperluas. Ini sering dapat diperbaiki di satu tempat dengan mengubah makro, atau menghindari penggunaannya demi mekanisme yang lebih dapat dipertahankan.
Nama analisis kode: NO_GOTO
Contoh
'goto clean-up' dalam makro
#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();
}
'goto clean-up' dalam makro, diganti dengan 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;
// ...
}
}