Bagikan melalui


/Zc:gotoScope (Menerapkan kesuaian dalam cakupan goto)

Opsi /Zc:gotoScope kompilator memungkinkan pemeriksaan perilaku C++ Standar sekeliling goto pernyataan yang melompati inisialisasi variabel lokal.

Sintaks

/Zc:gotoScope[-]

Keterangan

Opsi /Zc:gotoScope kompilator memberlakukan perilaku Standar C++ sekeliling goto pernyataan yang melompati inisialisasi satu atau beberapa variabel lokal. Pengkompilasi memancarkan kesalahan C2362 dalam semua kasus seperti itu ketika /Zc:gotoScope ditentukan. Melonggarkan /Zc:gotoScope- pemeriksaan ini, tetapi pengkompilasi masih memancarkan kesalahan jika goto melewati inisialisasi variabel lokal yang memiliki destruktor non-sepele.

Tujuan dari /Zc:gotoScope- opsi ini adalah untuk membantu memudahkan migrasi basis kode yang lebih lama ke kode yang lebih sesuai. Anda dapat menggunakannya untuk menekan kesalahan tertentu hingga Anda memperbarui kode yang tidak sesuai.

Opsi /Zc:gotoScope pengkompilasi baru di Visual Studio 2022 versi 17.4. Opsi nonaktif secara default. Ini diaktifkan secara otomatis oleh /permissive- opsi (atau opsi yang menyiratkan /permissive-, seperti /std:c++20 atau /std:c++latest). Untuk mengaktifkan pemeriksaan kesalahan secara eksplisit, tambahkan /Zc:gotoScope ke baris perintah pengkompilasi. Untuk menonaktifkan pemeriksaan secara eksplisit, gunakan /Zc:gotoScope- opsi . /Zc:gotoScope- harus muncul setelah /permissive- opsi atau opsi apa pun yang menyiratkan /permissive-.

Contoh

Sampel ini menghasilkan pesan kesalahan saat dikompilasi menggunakan /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'
*/

Jika kode dikompilasi dengan /Zc:gotoScope-, pengkompilasi tidak mengeluarkan kesalahan.

Bahkan ketika /Zc:gotoScope- ditentukan, pengkompilasi masih memancarkan kesalahan jika variabel lokal memiliki destruktor non-sepele. Contohnya:

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

Untuk mengatur opsi pengkompilasi ini di Visual Studio

  1. Buka kotak dialog Halaman Properti proyek. Untuk detailnya, lihat Mengatur pengkompilasi C++ dan membuat properti di Visual Studio.

  2. Pilih halaman properti Properti>Konfigurasi C/C++>Baris Perintah.

  3. Di Opsi tambahan, tambahkan /Zc:gotoScope atau /Zc:gotoScope-. Pilih OK atau Terapkan untuk menyimpan perubahan Anda.

Baca juga

/Zc (Kesuaian)
/permissive-
/std (Tentukan versi standar bahasa)