2010-09-04 15 views
23

Bir .c veya .h dosyasının en üstünde bulunan #include s düzenlemeye yardımcı olan araçlar var mı?#includes düzenlenmesine yardımcı olan araçlar var mı?

Sadece merak ediyorum, çünkü kodumu yeniden yapılandırarak, çeşitli küçük işlev tanımlarını/bildirimlerini tek bir uzun dosyadan farklı küçük dosyalara taşıyorum. Artık küçük dosyaların her biri, uzun dosyanın en üstünde bulunan #include s alt kümesine ihtiyaç duyar.

Sadece # includes'i elle çözmek için can sıkıcı ve hataya eğilimli. Çoğu zaman kod bile #include s var olsa derler. Örnek: A Dosyası, std::vector'u kapsamlı bir şekilde kullanır ancak vector; ama şu anda vector (belki bazı özyinelemeli içerir aracılığıyla) dahil olmak üzere bazı belirsiz başka bir başlık içerir.

+0

Bu sorunun hakkında Eclipse CDT sitesinde bir tartışma buldum: http://wiki.eclipse.org/CDT/C_editor_enhancements/Include_management – Frank

cevap

1
+0

İyi bir fikir, ama muhtemelen tam olarak ihtiyacım olan şey değil. Henüz tek bir tane eklememiş olsam bile ne eklemem gerektiğini söyleyen bir araç istiyorum (makedepend ve arkadaşlar bu durumda bir hata verebilir). Eclipse Java için yapar (belki de C++ için?). Ayrıca, makedepend her bir derleme birimine ('.o' dosyası) olan bağımlılıkları söyler, ancak belirli bir başlık dosyasının içermemesi gerekenleri söyler. – Frank

+3

Bence, düşündüğünüz gibi, sorun çözülemez. Örneğin, "EOF" un foo.c'de tanımlanmadığını söyleyen bir program çalıştırabilirim. Mekanik olarak EOF'un libio.h', stdio.h' ve (ör.) Foo.h'da tanımlandığını da belirleyebilirim. Hangisini ekleyebilirim? – msw

+4

geçerli bir noktayı sunuyorsunuz. Bununla birlikte, bir araç, dahil yolunda hangi başlıkların mevcut olduğu ve hatta belki de standart (veya popüler) olan önerilere dayanarak önerilerde bulunabilir. –

2

gccmakedep VisualAssistX bir tip tanımına atlama yardımcı olabilir. Örneğin. kaynağınızda bir sınıf MyClass kullanıyorsanız, bunu tıklayabilir, goto tanımını seçebilir ve VisualAssistX bu sınıfın tanımını içeren içerme dosyasını açar (muhtemelen Visual Studio bunu yapabilir, ancak bu noktada alışmak için VisualAssistX, VisualAssistX :-) için her harika özelliği katkıda bulunduğum). Kaynak kodunuz için gerekli olan içerme dosyasını bulmak için bunu kullanabilirsiniz.

PC-Lint tam tersini yapabilir. Kaynağınızda kullanılmayan bir kaynak dosyanız varsa, PC-Lint sizi bu konuda uyarabilir, böylece içerilen dosyanın kaynaktan kaldırılabileceğini (derleme süreniz üzerinde olumlu bir etki yaratacağını) bilirsiniz. .

0

Dosyaların nasıl bağlandığını görmek için doxygen/dot-graphviz'ın oluşturduğu grafikleri kullanıyorum. Çok kullanışlı, ancak otomatik değil, görsel olarak görsel olarak kontrol etmelisiniz, sonra gereksiz "#include" satırlarını kaldırmak için kodunuzu düzenleyiniz. Tabii ki, grafiklerin kullanılamaz hale geldiği çok büyük projelere (> 100 dosya) uygun değil.

1

Son zamanlarda bu problemle uğraşıyorum.

(1) A sınıfı bildirildi Ah, Eğer atıfta: Projemizde biz C++ kullanmak ve her sınıf X

Stratejim için bir Xh ve bir X.cpp dosyası şudur B sınıfı, daha sonra Bh başlık eklemek zorundayım Sınıf A'nın bildirimi sadece * B tipini içeriyorsa, o zaman sadece ileri bildirimine ihtiyacım var B sınıfı; A.h.'de. B.h'yi A.cpp'ye

(2) içine eklemem gerekebilir (2) Yukarıdaki prosedürü kullanarak, A.h'den A.cpp'ye olabildiğince fazla sayıda taşıyorum. Daha sonra bir kerede bir tane dahil etmeyi deneyin ve .cpp dosyasının hala derleyip derlemediğini görün. Bu, .cpp dosyasındaki dahil edilen dosyaların kümesini en aza indirmeye izin vermelidir, ancak sonuç minimum ise% 100 emin değilim. Bunun otomatik olarak yapılması için bir araç yazabileceğini düşünüyorum. Visual Studio için bir tane yazmaya başlamıştım. Böyle araçlar olduğunu bilmek isterim.

Not: iyi tanımlanmış içe/dışa aktarma ilişkilerine sahip uygun bir modül yapısı eklemek, C++ 0x için istenen bir ek olabilir. İthalatı yeniden düzenlemeyi çok daha kolaylaştıracak ve derlemeyi çok hızlandıracaktı.Bu soru yeni bir araç oluşturuldu istendi yana

1

: include-what-you-use, bu clang dayanmaktadır, sahte belirli sembollerle (memory içinde unique_ptr varlığını eşleşmelerini sağlar, ancak aslında bazı standart başlıklarda bits/unique_ptr.h tanımlanan ve sağlar kendi eşleştirmeleri sağlarlar.

güzel teşhis ve otomatik yeniden yazma sağlar. Ben bu. Öncelikle mis ne olduğunu görmek için dosyayı derlemek VisualAssistX kullanarak bunu

1

Now each of the smaller files needs a subset of the #includes that were at the top of the long file.

şarkı söyle. Sonra VisualAssistX'in Add include işlevini kullanabilirsiniz. Bu yüzden içerdiğim fonksiyonların veya sınıfların üzerine sağ tıklayıp, içerme ve İçeri Ekle'yi seçtim. Yeni eksik olanları filtrelemek için birkaç kez yeniden derleyin ve tamamlandı. Umarım bunu anlaşılabilir bir şekilde yazmışımdır.

Mükemmel değil, el ile yapmaktan daha hızlı.

İlgili konular