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.
File petunjuk berisi makro yang sebaliknya akan menyebabkan wilayah kode dilewati oleh Pengurai Database Penjelajahan C++. Saat Anda membuka proyek Visual Studio C++, pengurai menganalisis kode di setiap file sumber dalam proyek dan membangun database dengan informasi tentang setiap pengidentifikasi. IDE menggunakan informasi tersebut untuk mendukung fitur penjelajahan kode seperti browser Tampilan Kelas dan Bilah Navigasi.
Pengurai Database Penjelajahan C++ adalah pengurai fuzzy yang dapat mengurai sejumlah besar kode dalam waktu singkat. Salah satu alasannya cepat adalah karena melewati konten blok. Misalnya, hanya merekam lokasi dan parameter fungsi, dan mengabaikan kontennya. Makro tertentu dapat menyebabkan masalah untuk heuristik yang digunakan untuk menentukan awal dan akhir blok. Masalah ini menyebabkan wilayah kode direkam secara tidak benar.
Wilayah yang dilewati ini dapat bermanifestasi dalam beberapa cara:
Jenis dan fungsi yang hilang dalam Tampilan Kelas, Buka dan Bilah Navigasi
Cakupan yang salah di Bilah Navigasi
Saran untuk Membuat Deklarasi/Definisi untuk fungsi yang sudah ditentukan
File petunjuk berisi petunjuk yang dapat disesuaikan pengguna, yang memiliki sintaks yang sama dengan definisi makro C/C++. Visual C++ menyertakan file petunjuk bawaan yang cukup untuk sebagian besar proyek. Namun, Anda dapat membuat file petunjuk Anda sendiri untuk meningkatkan pengurai khusus untuk proyek Anda.
Penting
Jika Anda memodifikasi atau menambahkan file petunjuk, Anda perlu mengambil langkah tambahan agar perubahan diterapkan:
- Dalam versi sebelum Visual Studio 2017 versi 15.6: Hapus file .sdf dan/atau file VC.db dalam solusi untuk semua perubahan.
- Di Visual Studio 2017 versi 15.6 dan yang lebih baru: Tutup dan buka kembali solusi setelah menambahkan file petunjuk baru.
Skenario
#define NOEXCEPT noexcept
void Function() NOEXCEPT
{
}
Tanpa file petunjuk, Function tidak muncul di Tampilan Kelas, Buka atau Bilah Navigasi. Setelah menambahkan file petunjuk dengan definisi makro ini, pengurai sekarang memahami dan mengganti NOEXCEPT makro, yang memungkinkannya mengurai fungsi dengan benar:
#define NOEXCEPT
Makro Yang Mengganggu
Ada dua kategori makro yang mengganggu pengurai:
Makro yang merangkum kata kunci yang menghiasi fungsi
#define NOEXCEPT noexcept #define STDMETHODCALLTYPE __stdcallUntuk jenis makro ini, hanya nama makro yang diperlukan dalam file petunjuk:
#define NOEXCEPT #define STDMETHODCALLTYPEMakro yang berisi tanda kurung tidak seimbang
#define BEGIN {Untuk jenis makro ini, nama makro dan kontennya diperlukan dalam file petunjuk:
#define BEGIN {
Dukungan Editor
Mulai dari Visual Studio 2017 versi 15.8 ada beberapa fitur untuk mengidentifikasi makro yang mengganggu:
Makro yang berada di dalam wilayah yang dilewati oleh pengurai disorot.
Ada Tindakan Cepat untuk membuat file petunjuk yang menyertakan makro yang disorot, atau jika ada file petunjuk yang ada, untuk menambahkan makro ke file petunjuk.
Setelah menjalankan salah satu Tindakan Cepat, pengurai membandingkan kembali file yang terpengaruh oleh file petunjuk.
Secara default, makro masalah disorot sebagai saran. Sorotan dapat diubah menjadi sesuatu yang lebih terlihat, seperti berlekuk merah atau hijau. Gunakan opsi Makro di Wilayah Penjelajahan yang Dilewati di bagian Berlekuk Kode di bawah Opsi>Editor>Tampilan.
Tampilkan Kesalahan Database Penjelajahan
> menampilkan semua wilayah yang gagal diurai dalam Daftar Kesalahan. Perintah dimaksudkan untuk menyederhanakan pembuatan file petunjuk awal. Namun, pengurai tidak dapat mengetahui apakah penyebab kesalahan adalah makro yang mengganggu, jadi Anda harus mengevaluasi setiap kesalahan. Jalankan perintah Tampilkan Kesalahan Database Penjelajahan dan navigasikan ke setiap kesalahan untuk memuat file yang terpengaruh di editor. Setelah file dimuat, jika ada makro di dalam wilayah tersebut, makro akan disorot. Anda dapat memanggil Tindakan Cepat untuk menambahkannya ke file petunjuk. Setelah pembaruan file petunjuk, daftar kesalahan diperbarui secara otomatis. Atau, jika Anda memodifikasi file petunjuk secara manual, Anda dapat menggunakan perintah Rescan Solution untuk memicu pembaruan.
Sistem
File petunjuk terkait dengan direktori fisik, bukan direktori logis yang ditampilkan dalam Penjelajah Solusi. Anda tidak perlu menambahkan file petunjuk ke proyek Anda agar file petunjuk memiliki efek. Sistem penguraian menggunakan file petunjuk hanya ketika mengurai file sumber.
Setiap file petunjuk diberi nama cpp.hint. Banyak direktori dapat berisi file petunjuk, tetapi hanya satu file petunjuk yang dapat terjadi di direktori tertentu.
Proyek Anda dapat dipengaruhi oleh nol atau lebih file petunjuk. Jika tidak ada file petunjuk, sistem penguraian menggunakan teknik pemulihan kesalahan untuk mengabaikan kode sumber yang tidak dapat didefinisikan. Jika tidak, sistem penguraian menggunakan strategi berikut untuk menemukan dan mengumpulkan petunjuk.
Urutan Pencarian
Sistem penguraian mencari direktori untuk file petunjuk dalam urutan berikut.
Direktori yang berisi paket penginstalan untuk Visual C++ (vcpackages). Direktori ini berisi file petunjuk bawaan yang menjelaskan simbol dalam file sistem yang sering digunakan, seperti windows.h. Akibatnya, proyek Anda secara otomatis mewarisi sebagian besar petunjuk yang dibutuhkannya.
Jalur dari direktori akar file sumber ke direktori yang berisi file sumber itu sendiri. Dalam proyek Visual Studio C++ umum, direktori akar berisi solusi atau file proyek.
Pengecualian untuk aturan ini adalah jika file berhenti berada di jalur ke file sumber. File berhenti adalah file apa pun yang bernama cpp.stop. File berhenti menyediakan kontrol tambahan atas urutan pencarian. Alih-alih memulai dari direktori akar, sistem penguraian mencari dari direktori yang berisi file berhenti ke direktori yang berisi file sumber. Dalam proyek umum, Anda tidak memerlukan file berhenti.
Pengumpulan Petunjuk
File petunjuk berisi nol atau lebih petunjuk. Petunjuk didefinisikan atau dihapus seperti makro C/C++. Artinya, arahan #define praprosesor membuat atau mendefinisikan ulang petunjuk, dan #undef direktif menghapus petunjuk.
Sistem penguraian membuka setiap file petunjuk dalam urutan pencarian yang dijelaskan sebelumnya. Ini mengakumulasi petunjuk setiap file ke dalam serangkaian petunjuk yang efektif, lalu menggunakan petunjuk efektif untuk menginterpretasikan pengidentifikasi dalam kode Anda.
Sistem penguraian menggunakan aturan ini untuk mengakumulasi petunjuk:
Jika petunjuk baru menentukan nama yang belum ditentukan, petunjuk baru akan menambahkan nama ke petunjuk efektif.
Jika petunjuk baru menentukan nama yang sudah ditentukan, petunjuk baru akan mendefinisikan ulang petunjuk yang ada.
Jika petunjuk baru adalah
#undefarahan yang menentukan petunjuk efektif yang ada, petunjuk baru akan menghapus petunjuk yang ada.
Aturan pertama berarti bahwa petunjuk efektif diwarisi dari file petunjuk yang dibuka sebelumnya. Dua aturan terakhir berarti bahwa petunjuk nanti dalam urutan pencarian dapat mengambil alih petunjuk sebelumnya. Misalnya, Anda dapat mengambil alih petunjuk sebelumnya jika Anda membuat file petunjuk di direktori yang berisi file sumber.
Untuk penggambutan tentang bagaimana petunjuk dikumpulkan, lihat bagian Contoh .
Sintaks
Anda membuat dan menghapus petunjuk dengan menggunakan sintaks yang sama dengan arahan praprosesor untuk membuat dan menghapus makro. Bahkan, sistem penguraian menggunakan praproscessor C/C++ untuk mengevaluasi petunjuk. Untuk informasi selengkapnya tentang direktif pra-prosesor, lihat #define Directive (C/C++) dan #undef Directive (C/C++).
Satu-satunya elemen sintaksis yang tidak biasa adalah @<string pengganti , , @=dan @> . String penggantian khusus file petunjuk ini hanya digunakan dalam makro peta . Peta adalah sekumpulan makro yang menghubungkan data, fungsi, atau peristiwa dengan data, fungsi, atau penanganan aktivitas lainnya. Misalnya, MFC menggunakan peta untuk membuat peta pesan, dan ATL menggunakan peta untuk membuat peta objek. String penggantian khusus file petunjuk menandai elemen awal, menengah, dan akhir peta. Hanya nama makro peta yang signifikan. Oleh karena itu, setiap string pengganti sengaja menyembunyikan implementasi makro.
Petunjuk menggunakan sintaks ini:
| Sintaks | Makna |
|---|---|
#define
nama petunjukreplacement-string#define
nama( petunjuk parameter, ...)replacement-string |
Arahan praprosesor yang mendefinisikan petunjuk baru atau mendefinisikan ulang petunjuk yang ada. Setelah direktif, praproscessor menggantikan setiap kemunculan nama petunjuk dalam kode sumber dengan replacement-string. Formulir sintaks kedua mendefinisikan petunjuk seperti fungsi. Jika petunjuk seperti fungsi terjadi dalam kode sumber, praprosesor terlebih dahulu mengganti setiap kemunculan parameter dalam replacement-string dengan argumen yang sesuai dalam kode sumber, lalu mengganti hint-name dengan replacement-string. |
@< |
String penggantian khusus file petunjuk yang menunjukkan dimulainya sekumpulan elemen peta. |
@= |
String penggantian khusus file petunjuk yang menunjukkan elemen peta perantara. Peta dapat memiliki beberapa elemen peta. |
@> |
String penggantian khusus file petunjuk yang menunjukkan akhir dari sekumpulan elemen peta. |
#undef
nama petunjuk |
Direktif praproscesor yang menghapus petunjuk yang ada. Nama petunjuk disediakan oleh pengidentifikasi nama petunjuk. |
//
komentar |
Komentar satu baris. |
/*
komentar*/ |
Komentar multibaris. |
Contoh
Contoh ini menunjukkan bagaimana petunjuk diakumulasi dari file petunjuk. Hentikan file tidak digunakan dalam contoh ini.
Ilustrasi menunjukkan beberapa direktori fisik dalam proyek Visual Studio C++. Ada file petunjuk di vcpackagesdirektori , , DebugA1, dan A2 .
Petunjuk Direktori File
Direktori dan Isi File Petunjuk
Daftar ini memperlihatkan direktori dalam proyek ini yang berisi file petunjuk, dan isi file petunjuk tersebut. Hanya beberapa dari banyak petunjuk dalam vcpackages file petunjuk direktori yang tercantum:
vcpackages
// vcpackages (partial list) #define _In_ #define _In_opt_ #define _In_z_ #define _In_opt_z_ #define _In_count_(size)Pemecahan Kesalahan
// Debug #undef _In_ #define OBRACE { #define CBRACE } #define RAISE_EXCEPTION(x) throw (x) #define START_NAMESPACE namespace MyProject { #define END_NAMESPACE }A1
// A1 #define START_NAMESPACE namespace A1Namespace {A2
// A2 #undef OBRACE #undef CBRACE
Petunjuk Efektif
Tabel ini mencantumkan petunjuk efektif untuk file sumber dalam proyek ini:
File Sumber: A1_A2_B.cpp
Petunjuk efektif:
// vcpackages (partial list) #define _In_opt_ #define _In_z_ #define _In_opt_z_ #define _In_count_(size) // Debug... #define RAISE_EXCEPTION(x) throw (x) // A1 #define START_NAMESPACE namespace A1Namespace { // ...Debug #define END_NAMESPACE }
Catatan ini berlaku untuk daftar sebelumnya:
Petunjuk efektif berasal dari
vcpackagesdirektori , ,DebugA1, danA2.Direktif #undef dalam
Debugfile petunjuk menghapus#define _In_petunjuk dalamvcpackagesfile petunjuk direktori.File petunjuk dalam
A1direktori mendefiniskanSTART_NAMESPACEulang .#undefPetunjuk dalamA2direktori menghapus petunjuk untukOBRACEdanCBRACEdalamDebugfile petunjuk direktori.
Lihat juga
Jenis File Yang Dibuat untuk proyek C++ Visual Studio
Direktif #define (C/C++)
direktif #undef (C/C++)
Anotasi SAL