Bir dahili kitaplık için doxygen yorum blokları nereye yerleştirilir - H veya CPP dosyalarında? [kapalı]


100

Sağduyu, Doxygen yorum bloklarının, sınıfların, yapıların, numaralandırmaların, işlevlerin, bildirimlerin olduğu başlık dosyalarına yerleştirilmesi gerektiğini söyler. Bunun, kaynağı olmadan dağıtılması gereken kütüphaneler için sağlam bir argüman olduğunu kabul ediyorum (yalnızca nesne kodlu başlıklar ve kitaplıklar).

AMA ... Tam kaynak koduyla kullanılacak bir şirket içi (veya kendim için bir yan proje olarak) kitaplık geliştirirken tam tersi bir yaklaşımı düşünüyordum. Önerdiğim şey, başlıkta bildirilen sınıfların ve işlevlerin arayüzünü karıştırmamak için uygulama dosyalarına (HPP, INL, CPP, vb.) Büyük yorum bloklarını koymaktır.

Artıları:

  • Başlık dosyalarında daha az dağınıklık, yalnızca işlevlerin sınıflandırılması eklenebilir.
  • Örneğin Intellisense kullanıldığında önizlenen yorum blokları çakışmaz - bu .H dosyasındaki bir işlev için bir yorum bloğuna sahip olduğumda ve aynı .H dosyasında satır içi tanımına sahip olduğumda gözlemlediğim bir kusurdur. ancak .INL dosyasından dahil edilmiştir.

Eksileri:

  • (Açık olanı) Yorum blokları, bildirimlerin bulunduğu başlık dosyalarında değildir.

Öyleyse, ne düşünüyorsunuz ve muhtemelen öneriyorsunuz?

Yanıtlar:


78

Belgeleri, insanların kodu kullanırken ve üzerinde çalışırken okuyacağı ve yazacağı bir yere koyun.

Sınıf yorumları sınıfların önüne, yöntem açıklamaları yöntemlerin önüne geçer.

İşlerin bakımının yapıldığından emin olmanın en iyi yolu budur. Ayrıca üstbilgi dosyalarınızı görece zayıf tutar ve kişilerin yöntem belgelerini güncelleyerek başlıkların kirlenmesine ve yeniden oluşturmaları tetiklemesine neden olan dokunma sorununu önler . Aslında insanların bunu daha sonra belge yazmak için bir bahane olarak kullandıklarını biliyorum !


11
Üstbilgilerdeki belgelerden neden kaçınılması gerektiğine dair acı verici bir hatırlatma aldım - kıdemli bir Başkan Yardımcısı tarafından sınıf bildirimine yöntem yorumları koymam söylendi ve kendimi daha sonrası için yorum düzenlemelerini biriktirirken buldum çünkü bu başlıklara basmak 45 dakikalık bir oluşturma süresini tetikliyor !
Andy Dent

8
Olumsuz oylama değil, sadece sorgulama: Bir API'nin (hatta dahili bir API'nin) ne yaptığını anlamaya çalışıyorsam, .cpp'yi açmayı ve belgeleri bulmak için tüm kodu gözden geçirmeyi tercih ederim. Yöntemin ne yaptığına dair müşterinin görüşünden daha fazlasını belgelendirirseniz ( nasıl yaptığı gibi) bunun bir acı olacağını kabul ediyorum , ama yine de bunu yapmamalısınız, değil mi?
TED

8
Dokümantasyonunuzu oluşturmak için Doxygen'i kullanmanın tüm amacı, oluşturulan dokümantasyonun erişilebilir olmasıdır. Doxygen çıktısının gittiği dahili bir web sunucumuz var ve daha sonra tartışmalarda o sunucudaki sayfalara bağlantılar kullanabiliriz. Bu aynı zamanda sınıf veya yöntem belgelerini daha geniş tasarım sorunlarını tartışan ek sayfalarla birleştirir.
Andy Dent

1
Uygulama tartışmasının ne kadar kamuya açık olması gerektiğine karar vermek ilginç bir konudur. Elbette, belirli bir algoritma veya yan etkiler varsa, bunları kütüphanenin bir müşterisi olarak bilmeyi tercih ederim. Bazen yalnızca bakıcı bilmesi gerekir ve Doxygen koşullu bölümleri işaretlemenin kolay bir yolunu bulur, bu nedenle farklı bakış açıları için farklı dokümanlar oluşturabilirsiniz.
Andy Dent

78

İsimlerin birden çok yerde belgelenebilmesi gerçeğinden yararlanmayı seviyorum.

Başlık dosyasına, yöntemin kısa bir açıklamasını yazıyorum ve tüm parametrelerini belgeliyorum - bunların, yöntemin kendisinin uygulanmasından daha az değişme olasılığı daha düşüktür ve eğer değiştirirlerse, o zaman işlev prototipinin her durumda değiştirilmesi gerekir. .

Uzun formatlı dokümantasyonu kaynak dosyalara gerçek uygulamanın yanına koydum, böylece yöntem geliştikçe ayrıntılar değiştirilebilir.

Örneğin:

mymodule.h

/// @brief This method adds two integers.
/// @param a First integer to add.
/// @param b Second integer to add.
/// @return The sum of both parameters.
int add(int a, int b);

mymodule.cpp

/// This method uses a little-known variant of integer addition known as
/// Sophocles' Scissors. It optimises the function's performance on many
/// platforms that we may or may not choose to target in the future.
/// @TODO make sure I implemented the algorithm correctly with some unit tests.
int add(int a, int b) {
  return b + a;
}

3
Bu yöntemi beğendim, ancak AUTOBRIEF ile uyumsuz görünüyor. Üretilen çoklu özetleri ortadan kaldırmak için bir yapılandırma geçici çözümü olup olmadığını bilmek isterim.
Aaron Wright

Ben de bu yöntemi beğendim, uygulamada iyi bir denge sağlıyor.
Xofo

Bu yöntemi Doxygen 1.8.15 kullanarak makinemde yeniden oluşturamıyorum. Parametre dokümantasyonu görünmez, sadece kısa ve ayrıntılı açıklamalar görünür.
punyidea

1
Zeyilname: Ayrıntılı açıklamanın yerleşimini fonksiyon bloğunun içine değiştirmek bu işi benim için yaptı. Açıklama artık başlık belgelerinde açıklamaların sonuna eklenmiştir.
punyidea

19

Başlıkta yorumların olması, bir yorum değiştirilirse bir sınıfın tüm kullanıcılarının yeniden derlenmesi gerektiği anlamına gelir. Büyük projeler için kodlayıcılar, önümüzdeki 20 dakikayı her şeyi yeniden inşa etmek için harcama riski varsa, başlıklardaki yorumları güncellemeye daha az meyilli olacaklar.

Ve .. html belgesini okumanız ve dokümantasyon koduna göz atmanız gerekmediğinden, yorum bloklarının kaynak dosyalarda bulunmasının daha zor olması büyük bir sorun değildir.


Doğru, ancak yapay bir kaynaktan alınan dinamik bir kitaplıksa ve kaynak dosyalara sahip değilseniz bu büyük bir sorundur :-)
DrumM

13

Başlıklar: Dosyalara bakarken daha az başka "gürültü" olduğu için yorumları okumak daha kolaydır.

Kaynak: O halde yorumlara bakarken okuyabileceğiniz gerçek işlevlere sahipsiniz.

Biz sadece başlıklarda açıklanan tüm genel işlevleri ve kaynakta açıklanan yerel işlevleri kullanıyoruz. İsterseniz, belgeleri birkaç kez yazmak zorunda kalmadan birden çok yere eklemek için copydoc komutunu da dahil edebilirsiniz (bakım için daha iyidir)

Bununla birlikte, sonuçları basit bir komutla farklı dosya belgelerine kopyalayabilirsiniz. Örneğin :-

Benim dosyam1.h

/**
 * \brief Short about function
 *
 * More about function
 */
WORD my_fync1(BYTE*);

Benim dosyam1.c

/** \copydoc my_func1 */
WORD my_fync1(BYTE* data){/*code*/}

Artık her iki işlev için de aynı dokümantasyonu alıyorsunuz.

Bu, kod dosyalarında size daha az gürültü verirken, aynı zamanda son çıktıda birkaç yerde sunulan belgeleri tek bir yerde alırsınız.


2
blok ne zaman kopyalanır?
Mert Can Ergün

2

Genellikle .h dosyasına arabirim (\ param, \ return) için belgeleri ve .c / .cpp / .m dosyasına uygulama için belgeleri (\ details) koyarım. Doxygen, fonksiyon / yöntem dokümantasyonundaki her şeyi gruplar.


2

Her şeyi başlık dosyasına koydum.

Her şeyi belgeliyorum, ancak yalnızca genel arayüzü çıkarıyorum.


2

Programlama için QtCreator kullanıyorum. Çok kullanışlı bir numara, beyanı başlık dosyasında almak için bir işleve veya yönteme Ctrl-Tıklamadan oluşur.

Yöntem başlık dosyasında yorumlandığında, aradığınız bilgiyi hızlı bir şekilde bulabilirsiniz. Bu yüzden benim için yorumlar başlık dosyasında bulunmalıdır!


-1

C ++ 'da bazen uygulama başlık ve .cpp modülleri arasında bölünebilir. Burada, dokümantasyonu başlık dosyasına koymak daha temiz görünüyor, çünkü burası tüm genel işlevlerin ve yöntemlerin garanti edildiği tek yerdir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.