Visual Studio'da C/C++ eklemelerini temizleme
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:
- Yalnızca gerekli bir üst bilgi dosyası başka bir üst bilgi dosyası tarafından dolaylı olarak eklendiğinden derlenen kod için üst bilgi dosyaları ekleme teklifi sunar.
- Kullanılmayan üst bilgi dosyalarını kaldırmayı teklif ediyor; derleme sürelerini ve kod temizliğini geliştiriyor.
Temizlemeyi Ekle varsayılan olarak açıktır. Yapılandırmayı öğrenmek için bkz . Config C/C++ Include Cleanup in Visual Studio.
Doğrudan ve dolaylı üst bilgiler
İlk olarak bazı terminolojiler:
- Doğrudan üst bilgi, kodunuzda açıkça
#include
belirttiğiniz bir üst bilgidir. - Dolaylı üst bilgi, açıkça
#include
belirtmezseniz üst bilgidir. Bunun yerine, doğrudan eklediğiniz bir üst bilgi dosyası içerir. Ayrıca dolaylı bir üst bilginin de dahiltransitively
olduğunu söylüyoruz.
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
doğrudan üst bilgidir çünkü myProgram.cpp
bunu açıkça içerir. myHeader.h
<iostream>
ve içerir<string>
, dolayısıyla bunlar dolaylı üst bilgilerdir.
Sorun, ve std::cout
kullanır std::string
ancak bunları tanımlayan üst bilgileri doğrudan içermemesidirmyProgram.cpp
. Bu üst bilgileri içerdiği için myHeader.h
bu kod derleniyor. Bu kod kırılgandır çünkü iki koddan birini myProgram.cpp
de dahil olmak üzere durdurulursa myHeader.h
artık derlenemez.
C++ yönergelerine göre, kodunuzun üst bilgi dosyalarındaki değişikliklerin neden olduğu kırılganlığa maruz kalabilmesi için tüm bağımlılıklarınızın üst bilgilerini açıkça dahil etmek daha iyidir. Daha fazla bilgi için bkz . C++ Çekirdek Yönergeleri SF.10.
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ı, öneriler vb. biçiminde olabilir. Temizlemeyi Dahil Et tarafından sağlanan geri bildirim hakkında daha fazla bilgi için bkz . Temizleme iletilerini dahil et.
Kullanılmayan üst bilgiler
Kodunuz geliştikçe artık bazı üst bilgi dosyalarına ihtiyacınız olmayabilir. Karmaşık bir projede bunu 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, içinde açıklama satırı yapılırsa myProgram.cpp
ne olurmyFunc()
?
// 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"
açıklama çıkarıldığından kullanılmadığından myFunc()
soluk (Visual Studio'da C++ #include aracını yapılandırma bölümünde açıklanan ayar).
Hızlı işlem menüsünü açmak için imlecinizi soluk #include
görüntünün üzerine getirin. Kullanılmayan dosyayla ilgili eylemleri görmek için ampule tıklayın (veya Olası düzeltmeleri göster bağlantısını seçin):
Geçişli olarak kullanılan üst bilgiler ekleme
Kullanılmayan üst bilgi dosyasını kaldırmayı seçebiliriz, ancak bu nedenle kodu <string>
bozar ve <iostream>
dolaylı olarak aracılığıyla myheader.h
eklenir.
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 üst bilgiyi myHeader.h
kaldırır, ancak dolaylı olarak aracılığıyla myHeader.h
dahil edilen tüm üst bilgileri de ekler. Bu durumda sonuç, öğesine ve myProgram.cpp
#include <iostream>
ekleyip #include <string>
öğesini kaldırır#include "myHeader.h"
:
// 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ç açıklamaları güncelleştirmez, ancak kodun şimdi ve std::cout
doğrudan kullandığını std::string
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
Önce dolaylı olarak eklenen üst bilgi dosyalarını eklemeden kullanılmayan üst bilgi dosyaları gibi görünen dosyaları kaldırmayın. Bunun nedeni kodunuzun, aksi takdirde kullanılmayan bir üst bilgi dosyasındaki dolaylı eklemelere güvenmesi 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.
Bunun bir yolu, Eksik ekle için Temizleme ekle ayarını Öneri düzeyi (Araçlar>Seçenekleri>Metin Düzenleyicisi>C/C++>Kod Temizleme) olarak ayarlamaktır. Ayrıca Kullanılmayan eklemeleri kaldır öneri düzeyini Ö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çılan listesinde Geçişli olarak kullanılan tüm eklemeleri ekle'yi seçin.
- 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çılan listesinden Kullanılmayan tüm içeriği kaldır'ı seçin.
- Tüm Temizlemeyi Ekle önerileri ele alınana kadar projenizde 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 bilgileri eklemenize nasıl yardımcı olabileceğini gördünüz. Bu, 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++ Temizleme ekle'yi yapılandırma
Temizleme iletilerini dahil et