IntelliSense için C++ projesi yapılandırma
Bazı durumlarda IntelliSense'in düzgün çalışmasını sağlamak için C++ projenizi el ile yapılandırmanız gerekebilir. MSBuild projeleri için (.vcxproj dosyaları temel alarak), proje özelliklerindeki ayarları ayarlayabilirsiniz. MSBuild olmayan projelerde, projenin kök dizinindeki CppProperties.json dosyasındaki ayarları ayarlarsınız. Bazı durumlarda, IntelliSense'in makro tanımlarını anlamasına yardımcı olmak için bir ipucu dosyası oluşturmanız gerekebilir. Visual Studio IDE, IntelliSense sorunlarını belirlemenize ve çözmenize yardımcı olur.
Tek dosyalı IntelliSense
Projeye dahil olmayan bir dosyayı açtığınızda, Visual Studio bazı IntelliSense desteği sağlar, ancak varsayılan olarak hata dalgalı çizgileri gösterilmez. Eğer Gezinti ÇubuğuÇeşitli Dosyalaryazıyorsa, bu muhtemelen hatalı kodun altında hata dalgalanmalarını neden görmediğinizi ya da bir önişlemci makronun neden tanımlanmadığını açıklar.
Hata Listesini Denetleme
Bir dosya tek dosya modunda açık değilse ve IntelliSense düzgün çalışmıyorsa, denetlenecek ilk yer Hata Listesi penceresidir. Geçerli kaynak dosyanın tüm IntelliSense hatalarını ve tüm dahil edilen üst bilgi dosyalarıyla birlikte görmek için açılan listeden 'Derleme + IntelliSense' seçin.
VC++ IntelliSense Hata Listesi
IntelliSense en fazla 1000 hata üretir. Bir kaynak dosyanın içerdiği üst bilgi dosyalarında 1000'den fazla hata varsa, kaynak dosya kaynak dosyanın en başında yalnızca tek bir hata dalgalı çizgi gösterir.
#include yollarının doğru olduğundan emin olun
MSBuild projeleri
Derlemelerinizi Visual Studio IDE dışında çalıştırırsanız ve derlemeleriniz başarılı oluyor ancak IntelliSense yanlışsa, komut satırınız bir veya daha fazla yapılandırmanın proje ayarlarıyla eşitlenmemiş olabilir. Çözüm Gezgini proje düğümüne sağ tıklayın ve tüm #include yollarının geçerli yapılandırma ve platform için doğru olduğundan emin olun. Yollar tüm yapılandırmalarda ve platformlarda aynıysa, Tüm yapılandırmalar ve Tüm platformlar seçebilir ve yolların doğru olduğunu doğrulayabilirsiniz.
VC_IncludePathgibi derleme makrolarının geçerli değerlerini görmek için Dizinleri Ekle satırını seçin ve sağ taraftaki açılan menüye tıklayın. Ardından <Düzenle> seçin ve Makrolar düğmesine tıklayın.
Makefile projeleri
NMake proje şablonunu temel alan Makefile projeleri için sol bölmede NMake'i seçin ve ardından IntelliSense kategorisinin altında Arama yolunu dahil et seçeneğini seçin.
içerir
Klasör projelerini açma
CMake projeleri için, CMakeLists.txtiçindeki tüm yapılandırmalar için #include yolların doğru belirtildiğine emin olun. Diğer proje türleri için bir CppProperties.json dosyası gerekebilir. Daha fazla bilgi için bkz. CppProperties.jsonile IntelliSense'i yapılandırma
CppProperties.json dosyasında söz dizimi hatası varsa, etkilenen dosyalardaki IntelliSense yanlış olur. Visual Studio, hatayı Çıkış Penceresi'nde görüntüler.
Etiket ayrıştırıcı sorunları
Etiket ayrıştırıcısı, gözatma ve gezinti için kullanılan "bulanık" bir C++ ayrıştırıcıdır. Çok hızlıdır ancak her kod yapısını tamamen kavramaya çalışmaz.
Örneğin, ön işlemci makrolarını değerlendirmez ve bu nedenle bunları yoğun şekilde kullanan kodu yanlış ayrıştırabilir. Etiket Ayrıştırıcısı tanıdık olmayan bir kod yapısıyla karşılaştığında, kodun tüm bölgesini atlayabilir.
Bu sorunun Visual Studio'da bildirildiği iki yaygın yol vardır:
Gezinti Çubuğu en içteki makroyu gösteriyorsa geçerli işlev tanımı atlandı:
IDE, önceden tanımlanmış bir işlev için işlev tanımı oluşturmayı sunar:
Bu tür sorunları çözmek için çözüm dizininizin köküne cpp.hint adlı bir dosya ekleyin. Daha fazla bilgi için bkz. İpucu Dosyaları.
Etiket ayrıştırıcı hataları Hata Listesi penceresinde görüntülenir.
Tanılama günlüğü ile proje ayarlarını doğrulama
IntelliSense derleyicisinin Yolları ve Önişlemci makroları dahil olmak üzere doğru derleyici seçeneklerini kullanıp kullanmadığını denetlemek için, C/C++
Çıkış Penceresi artık IntelliSense derleyicisine geçirilen komut satırlarını gösterir. Aşağıda örnek bir çıkış verilmiştir:
[IntelliSense] Configuration Name: Debug|Win32
[IntelliSense] Toolset IntelliSense Identifier:
[IntelliSense] command line options:
/c
/I.
/IC:\Repo\Includes
/DWIN32
/DDEBUG
/D_DEBUG
/Zc:wchar_t-
/Zc:forScope
/Yustdafx.h
Bu bilgiler, IntelliSense'in neden yanlış bilgiler sağladığını anlamanıza yardımcı olabilir. Örneğin, projenizin Include dizini $(MyVariable)\Include
IntelliSense oluşturma hakkında
Visual Studio, tüm IntelliSense özelliklerini destekleyen veritabanını oluşturmak ve korumak için ayrılmış bir C++ derleyicisi kullanır. IntelliSense veritabanını kodla eşitlenmiş durumda tutmak için Visual Studio, proje ayarlarında veya kaynak dosyalarda yapılan bazı değişikliklere yanıt olarak IntelliSense yalnızca derlemelerini otomatik olarak arka plan görevleri olarak başlatır.
Ancak bazı durumlarda Visual Studio, IntelliSense veritabanını zamanında güncelleştiremeyebilir. Örneğin, git pull veya git checkout komutu çalıştırdığınızda, Visual Studio'nun dosyalardaki değişiklikleri fark etmesi bir saat kadar sürebilir. Çözüm Gezgini
IntelliSense derleme hatalarını giderme
IntelliSense derlemesi ikili dosyalar oluşturmaz, ancak yine de başarısız olabilir. Hatanın olası nedenlerinden biri özel .props veya .targets dosyalarıdır. Visual Studio 2017 sürüm 15.6 ve daha sonraki sürümlerde, yalnızca IntelliSense kaynaklı derleme hataları Çıkış penceresine kaydedilir. Bunları görmek için seçeneğini'den Çözümolarak ayarlayın:
Hata iletisi, tasarım zamanı izlemeyi etkinleştirmenizi isteyebilir:
error: Designtime build failed for project 'E:\src\MyProject\MyProject.vcxproj',
configuration 'Debug|x64'. IntelliSense might be unavailable.
Set environment variable TRACEDESIGNTIME=true and restart
Visual Studio to investigate.
TRACEDESIGNTIME ortam değişkenini true olarak ayarlar ve Visual Studio'yu yeniden başlatırsanız, %TEMP% dizininde derleme hatasını tanılamaya yardımcı olabilecek bir günlük dosyası görürsünüz.
TRACEDESIGNTIME ortam değişkeni hakkında daha fazla bilgi edinmek için bkz. Roslyn ve Common Project System. Bu makalelerdeki bilgiler C++ projeleri için geçerlidir.