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.
Visual Studio 17.8 Preview 1'den başlayarak, Visual Studio aşağıdaki yollarla kodunuzun kalitesini geliştiren bir #include temizleme özelliği sağlar:
Visual Studio, kodunuzun kalitesini aşağıdaki yollarla geliştiren bir #include temizleme özelliği sağlar:
- Yalnızca gerekli bir üst bilgi dosyası başka bir üst bilgi dosyası aracılığıyla dolaylı olarak eklendiği için derlenen kod için üst bilgi dosyaları eklemeyi önerir.
- Kullanılmayan üst bilgi dosyalarını kaldırmayı teklif ediyor; derleme sürelerini ve kod temizliğini geliştiriyor.
Temizlemeyi Dahil Et varsayılan olarak kapalıdır. Nasıl yapılandırılacağını öğrenmek için Visual Studio'da C/C++ Include Temizleme Yapılandırması konusuna bakın.
Doğrudan ve dolaylı üst bilgiler
Bazı terminoloji:
- Doğrudan başlık, kodunuzda açıkça
#includetanımladığınız bir başlıktır. - Doğrudan eklediğiniz bir başlık onu içerdiği için dolaylı bir başlık eklenir. Dolaylı bir başlığın da
transitivelydahil edildiğini söyleyebilirsiniz.
Dahil Et Cleanup kodunuzu analiz eder ve hangi üst bilgilerin kullanılmadığını ve hangilerinin dolaylı olarak dahil olduğunu belirler. Aşağıdaki üst bilgi dosyasını göz önünde bulundurun:
// myHeader.h
#include <string>
#include <iostream>
void myFunc()
{
std::string s = "myFunc()\n";
std::cout << s;
}
Ve bunu kullanan program:
// myProgram.cpp
#include "myHeader.h"
int main()
{
std::string s = "main()"; // string is indirectly included by myHeader.h
std::cout << s; // cout is indirectly included by myHeader.h
myFunc();
}
myHeader.h, myProgram.cpp onu açıkça içerdiği için doğrudan bir başlık dosyasıdır.
myHeader.h, <string> ve <iostream> öğelerini içerir, dolayısıyla bunlar dolaylı başlıklardır.
Sorun şu ki myProgram.cpp, std::string ve std::cout kullanıyor, ancak bunları tanımlayan başlık dosyalarını doğrudan içermiyor. Bu kod, myHeader.h bu başlık dosyalarını içerdiği için derlenir. Bu kod kırılgandır, çünkü myHeader.h bunlardan herhangi birini dahil etmeyi bırakırsa myProgram.cpp artık derlenmez.
C++ yönergelerine göre, kodunuzun başlık dosyalarındaki değişikliklerden kaynaklanan kırılganlığa maruz kalmaması için tüm bağımlılıklarınız için başlık dosyalarını açıkça dahil etmek daha iyi olur. Kılavuz hakkında daha fazla bilgi için, C++ Temel Yönergeleri'ndeki SF.10: Örtük olarak #includebildirilen adlara bağımlılıklardan kaçının bölümüne bakın.
Include Cleanup, kullanılmayan ve dolaylı olarak dahil edilen üst bilgileri tanımlamak için kodunuzu analiz eder. Visual Studio'da C++ #include aracını yapılandırma bölümünde açıklanan ayarlara göre geri bildirim sağlar. Geri bildirim, hata listesi uyarıları ve önerileri biçiminde gelir. Temizlemeyi Dahil Et tarafından sağlanan geri bildirim hakkında daha fazla bilgi için bkz. Temizleme iletilerini dahil et.
Kullanılmayan başlıklar
Kodunuz geliştikçe artık bazı üst bilgi dosyalarına ihtiyacınız olmayabilir. Karmaşık bir projede bu üst bilgileri izlemek zordur. Derleyici gereksiz üst bilgi dosyalarını işlediğinden derlemeleriniz zaman içinde daha uzun sürebilir.
Temizlemeyi Dahil Et , kullanılmayan üst bilgileri bulmanıza ve kaldırmanıza yardımcı olur. Örneğin, myFunc() içinde myProgram.cpp öğesini yoruma alırsanız ne olur:
// myProgram.cpp
#include "myHeader.h"
int main()
{
std::string s = "main()"; // string is indirectly included from myHeader.h
std::cout << s; // cout is indirectly included from myHeader.h
// myFunc(); // directly included from myHeader.h
}
Aşağıdaki ekran görüntüsünde, #include "myHeader.h" soluk görünür (bu ayar, Visual Studio'da C++ #include aracını yapılandırma bölümünde açıklanmıştır); çünkü myFunc() açıklama satırı yapıldığından artık gerekli değildir.
Hızlı eylem menüsünü açmak için imlecinizi soluk görünen #include öğesinin üzerine getirin. Kullanılmayan dosyayla ilgili eylemleri görmek için ampulü seçin (veya Olası düzeltmeleri göster bağlantısını seçin):
Geçişli kullanılan başlıklar ekle
Kullanılmayan başlık dosyasını kaldırmayı seçebilirsiniz, ancak bu işlem kodu bozar; çünkü <string> ve <iostream>, myheader.h tarafından dolaylı olarak içerilir.
Bunun yerine, Geçişli olarak kullanılanların tümünü ekle'yi seçebilir ve kullanılmayan tüm #includes kaldırabiliriz. Bu, kullanılmayan başlığı myHeader.h kaldırır, ancak myHeader.h aracılığıyla dolaylı olarak dahil edilen ve kullanılan tüm başlıkları da ekler. Bu durumda sonuç, #include <string> ve #include <iostream> öğelerini myProgram.cpp öğesine eklemek ve #include "myHeader.h" öğesini kaldırmaktır:
// myProgram.cpp
#include <iostream>
#include <string>
int main()
{
std::string s = "main()"; // string is directly included from <string>
std::cout << s; // cout is directly included from <string>
// MyFunc();
}
Araç yorumları güncellemiyor, ancak kodun artık std::string ve std::cout etiketlerini doğrudan kullandığını görebilirsiniz. Bu kod, gerekli diğer üst bilgileri içermeye bağlı myHeader.h olmadığından artık kırılgan değildir.
En iyi uygulama
Dolaylı olarak dahil edilen başlık dosyalarını önce eklemeden, kullanılmıyor gibi görünen başlık dosyalarını kaldırmayın. Kodunuz, aslında kullanılmayan bir başlık dosyasındaki dolaylı içe aktarmalara bağımlı olabilir. Önce geçişli olarak kullanılan üst bilgileri ekleyin. Ardından, kullanılmayan üst bilgileri kaldırdığınızda, kaldırdığınız bir üst bilgi dosyası tarafından dolaylı olarak eklenen eksik üst bilgi dosyaları nedeniyle derleme hataları almazsınız.
Bunu yapmak için bir yol vardır:
- Eksik include’ları ekleme öneri düzeyi için Include Cleanup ayarını Öneri olarak ayarlayın (Araçlar>Seçenekler>Metin Düzenleyicisi>C/C++>Kod Temizleme).
- Kullanılmayan include'ları kaldır öneri düzeyi değerini Öneri olarak ayarlayın.
Bunu yapmak için bir yol vardır:
- Geçişli olarak dahil edilen eksik #include deyimlerinin nasıl vurgulanacağını seçin için Temizlemeyi Dahil Et ayarının açılır listesini Öneri olarak ayarlayın (Araçlar>Seçenekler>Tüm Ayarlar>Diller>C/C++>Kod temizleme>Include temizleme).
- Kullanılmayan #include deyimlerini vurgulama seçeneğini Öneri olarak ayarlayın.
Ardından:
- Hata listesinde, filtrenin Derleme + IntelliSense olarak ayarlandığından emin olun.
- "#include x içeriği bu dosyada kullanılır ve geçişli olarak eklenir" örneklerini arayın.
- İmlecinizi öneriyle birlikte bir çizginin üzerine getirin. Ampul açılır listesinden Geçişli olarak kullanılan tüm include’ları ekle seçeneğini belirleyin.
- Geçişli eklemelerle ilgili tüm öneriler ele alınana kadar projenizde bu adımları yineleyin.
- Kullanılmayan eklemeleri kaldır: Hata listesinde "#include x bu dosyada kullanılmadı" örneğini arayın.
- İmlecinizi kullanılmayan üst bilginin üzerine getirin. Ampul açılır listesinden Kullanılmayan tüm include'ları kaldır seçeneğini belirleyin.
- Projenizde, tüm Include Cleanup önerileri ele alınana kadar bu adımları yineleyin.
Bu kısa genel bakışta, Temizlemeyi Dahil Et'in kullanılmayan üst bilgileri kaldırmanıza ve dolaylı olarak eklenmiş üst bilgiler eklemenize nasıl yardımcı olabileceğini gördünüz. Bu işlem kodunuzu temiz tutmanıza, potansiyel olarak daha hızlı oluşturmanıza yardımcı olur ve kodunuzun kırılganlığını azaltır.
Ayrıca bkz.
Visual Studio'da C/C++ Include Cleanup'ı yapılandırın
Temizleme iletilerini dahil et