Beste Tipps zum Dokumentieren von Code mit Doxygen? [closed]

Lesezeit: 10 Minuten

Benutzeravatar von Andrew Johnson
Andreas Johnson

Mein Team beginnt mit der Dokumentation unseres C-Codes mit Doxygen und achtet dabei besonders auf unsere öffentlichen API-Header. Es scheint eine Menge Flexibilität und verschiedene Spezialbefehle in Doxygen zu geben, was großartig ist, aber ohne Versuch und Irrtum ist nicht klar, was gut und was schlecht ist.

Was sind Ihre Lieblingsmethoden, um Ihren Code zu markieren, was sind Ihre MUSS und NICHT?
Bitte geben Sie Ihre Top-Tipps an, einen pro Antwort, um die Abstimmung zu erleichtern.

Ich möchte unseren gesamten Ansatz für die API-Dokumentation definieren, einschließlich der Bereitstellung einer Vorlage, um dem Rest des Teams den Einstieg zu erleichtern. Bisher habe ich so etwas:

/**
 * @file   example_action.h
 * @Author Me ([email protected])
 * @date   September, 2008
 * @brief  Brief description of file.
 *
 * Detailed description of file.
 */

/**
 * @name    Example API Actions
 * @brief   Example actions available.
 * @ingroup example
 *
 * This API provides certain actions as an example.
 *
 * @param [in] repeat  Number of times to do nothing.
 *
 * @retval TRUE   Successfully did nothing.
 * @retval FALSE  Oops, did something.
 *
 * Example Usage:
 * @code
 *    example_nada(3); // Do nothing 3 times.
 * @endcode
 */
boolean example(int repeat);

  • Ich persönlich denke, dass die [in] Und [out] Teile des param sollte nicht benötigt werden. Ihre API sollte angeben, ob etwas eine In-Variable oder eine Out-Variable ist: const int * const a ist ein in Und int * const a ist und out

    – Matt Clarkson

    24. August 2012 um 8:03 Uhr

  • Die Dateiautorschaft gehört nicht zu einer Quelldatei, es sei denn, der Name des Autors ist Teil der Urheberrechtserklärung. Herauszufinden, wer was geschrieben hat, ist die Daseinsberechtigung der Schuldzuweisungsfunktion der Quellcodeverwaltung

    – Kuba hat Monica nicht vergessen

    4. August 2014 um 14:48 Uhr


  • @Mark, daran hatte ich nicht gedacht (+1). Natürlich ist es nicht so sofort intuitiv, aber es kann nicht aus dem Takt geraten, also guter Punkt. Ich habe gelegentlich #defineD INPUT, MODIFY Und OUTPUT als leere Makros verwendet und sie sowohl bei Deklarationen als auch bei Actucall-Aufrufen verwendet. Ob das gut ist, darüber gehen die Meinungen auseinander.

    – Mawg sagt, Monica wieder einzusetzen

    22. November 2016 um 12:32 Uhr

Benutzeravatar von Étienne
Etienne

Sie brauchen und sollten den Namen der Datei nicht in die schreiben @file Direktive liest doxygen den Namen der Datei automatisch. Das Problem beim Schreiben des Dateinamens besteht darin, dass Sie beim Umbenennen der Datei die ändern müssen @file auch Direktive.

Bereitstellen @author Und @date Informationen sind die meiste Zeit auch nutzlos, da das Versionskontrollsystem es viel besser macht als jemand, der die Dateien manuell bearbeitet.

Du musst auch nicht schreiben @brief wenn Sie die folgende Doxygen-Syntax verwenden und JAVADOC_AUTOBRIEF in der Konfiguration von Doxygen aktivieren:

/*! Short Description on the first line

    Detailed description...
    ...
*/
void foo(void) {}

Der @name Direktive für Funktionen ist auch meistens zu 100% redundant und völlig nutzlos. Es bringt nur Fehler, wenn jemand den Namen der Funktion ändert und nicht das Doxygen @name.

  • Die doxygen-Dokumentation sagt: “Wiederholen wir das, weil es oft übersehen wird: Um globale Objekte (Funktionen, Typedefs, Enum, Makros usw.) zu dokumentieren, müssen Sie die Datei dokumentieren, in der sie definiert sind. Mit anderen Worten, es muss mindestens sei ein /*!\file / oder ein /* @file */ line in this file.” scheint darauf hinzudeuten, dass \file notwendig sein kann. Dies kann jedoch einfach falsch interpretiert werden. Es lohnt sich, es zu klären.

    – ivo Welch

    22. Juni 2014 um 1:48 Uhr

  • \file ist notwendig, aber nicht der Name der Datei, mehr sage ich nicht 😉

    – Etienne

    22. Juni 2014 um 6:49 Uhr

  • Bitte Étienne, fügen Sie Ihrer Antwort ein Beispiel für den Anfang einer Datei hinzu \file ohne den Dateinamen. Ich denke du musst einstellen JAVADOC_AUTOBRIEF = YES um die Verwendung zu vermeiden @brief. Kannst du bestätigen? Was raten Sie, um ein Briefing für eine Datei bereitzustellen? Beifall

    – oho

    1. Juli 2016 um 9:07 Uhr


  • @ivoWelch In ihrer Dokumentation heißt es auch: “Für Memberfunktionen oder Funktionen, die Teil eines Namespace sind, sollten Sie entweder die Klasse oder den Namespace dokumentieren.” \file scheint also nicht erforderlich zu sein, wenn sich alle Ihre freien Funktionen in Namespaces befinden? Das habe ich aber nicht gecheckt…

    – Ela782

    1. September 2016 um 0:21 Uhr

  • Sie brauchen \file nicht, wenn sich alle Ihre Funktionen in einer Klasse oder einem Namensraum befinden. Bitte denken Sie daran, dass ich auf eine bestimmte Frage geantwortet habe, die \file in einer Vorlage verwendet (und das ist meiner Meinung nach sinnvoll).

    – Etienne

    4. September 2016 um 14:39 Uhr

Benutzeravatar von Andy Dent
Andy Dent

Schreib ein beschreibende Homepage mit @mainpage (in einer separaten Header-Datei nur für diesen Zweck). Erwägen Sie, wie in meinem Beispiel gezeigt, es zu einem Leitfaden für Ihre Hauptklassen/Funktionen und Module zu machen.

Eine weitere Probe

Während ich den oben verlinkten Haupt-Oofile-Doxygen-Inhalt wieder online stellte, ist hier ein Beispiel aus einer aktuellen Kundenarbeit im Markdown-Format. Mit Markdown können Sie auf eine Hauptseite in Markdown (in den Doxygen-Einstellungen) verweisen, was für das Typische großartig ist readme.md Datei, die in Open-Source-Projekten enthalten ist.

Lingopal
========
Developer Documentation started when Andy Dent took over support in May 2014. 

There are a number of pages in Markdown format which explain key aspects:

- @ref doc/LingopalBuilding.md
- @ref doc/LingopalSigning.md
- @ref doc/LingopalDatabases.md
- @ref doc/LingopalExternals.md

See the <a href="https://stackoverflow.com/questions/51667/pages.html">Related Pages list for more.</a>

-------------

_Note_

These pages, whilst readable by themselves, are designed to be run through the [Doxygen](http://www.doxygen.com) code documentation engine which builds an entire local cross-referenced set of docs. It uses a minor [extension of Markdown formatting.](http://www.stack.nl/~dimitri/doxygen/manual/markdown.html)

The settings to generate the documentation are `Lingopal.doxy` and `LingopalDocOnly.doxy`. The latter is used for quick re-generation of just these additional pages.

  • Der Link ist tot, ich verstehe nicht, was du meinst. Ich schlage vor, entweder die Antwort so zu erweitern, dass sie in sich geschlossen ist, oder den toten Link zu reparieren.

    – Rick Deckard

    12. Juni 2014 um 19:50 Uhr

  • Entschuldigung, ich werde versuchen, es so schnell wie möglich wiederherzustellen, war in meinem Blog einem DDOS ausgesetzt und musste als Folge davon auch meine Doxygen-Site herunterfahren, da sie zu viele Dateien in einem Verzeichnis hatte

    – Andy Dent

    14. Juni 2014 um 0:55 Uhr

Benutzeravatar von Andy Dent
Andy Dent

Verwenden Gruppen um Ihren Code in Module zu organisieren.

Denken Sie daran, dass Sie fast alles in mehrere Gruppen packen können, damit sie wie die Tags in Stack Overflow für semantisches Tagging verwendet werden können. Beispielsweise können Sie Dinge als spezifisch für eine bestimmte Plattform kennzeichnen.

Sie können auch Gruppen verwenden, um a abzugleichen Ordnerhierarchie innerhalb einer IDEwie in meinem RB2Doxy-Beispiel gezeigt Ausgang.

Gruppen funktionieren gut, wenn sie verschachtelt sind – ich habe ein großes Beispiel dafür OOFILE-Quelle.

  • Ja, die Verwendung verschachtelter Gruppen war das, worüber ich mit einer meiner Antworten gesprochen habe. Ich habe mit der Verwendung einer separaten Datei für die Hierarchieverwaltung experimentiert, was gut zu funktionieren scheint.

    – Andreas Johnson

    17. März 2009 um 15:01 Uhr

  • Ich wünschte, ich könnte dieser und den anderen Antworten, an denen Gruppen beteiligt sind, mehr als eine Stimme geben. Doxygen kann Ihnen nichts sagen, was nicht bereits in Ihrem Code enthalten ist. Es kann die Informationen jedoch in einer anderen Reihenfolge darstellen oder filtern. Gruppen sind eines der nützlichsten Dinge, die Sie in Kommentaren hinzufügen können, da doxygen Ihnen das geben kann, was Sie nicht erhalten, wenn Sie die Quelldateien in einem Editor öffnen – eine erheblich neu organisierte Ansicht Ihres Codes.

    – Bowie Owens

    22. September 2011 um 1:55 Uhr

  • Kaputte Links…

    – Aaron Campbell

    9. April 2015 um 23:11 Uhr

  • Ich habe die RB2Doxy-Ausgabe in einer ZIP-Datei gefunden: oofile.com.au/files/REALbasic/RB2DoxySample.zip

    – Heißes Öl

    21. Januar 2016 um 20:00 Uhr

  • Können Sie bitte die Links in Ihrer Antwort reparieren?

    – xaxxon

    6. Juni 2017 um 2:49 Uhr

Einige Befehle, die ich in meinem Code verwende:

  • \todo { paragraph describing what is to be done } Nützlich, um Todos im Auge zu behalten, wird in der endgültigen Dokumentation eine Seite erstellt, die Ihre Todo-Liste enthält.
  • \c <word> Zeigt das Argument mit einer Schreibmaschinenschrift an. Verwenden Sie dies, um auf ein Codewort zu verweisen. Ich würde es in Ihrem Beispiel vor “TRUE” und “FALSE” verwenden.
  • \a , \warning , \see : sehen http://www.stack.nl/~dimitri/doxygen/commands.html#cmdc zur Beschreibung

Eine gute „Best Practice“ (obwohl nicht immer erreichbar) besteht darin, kurze, funktionierende Beispiele für jede API bereitzustellen und sie mit \includelineno (oder \include für keine Zeilennummern) in die Hilfe zu ziehen. Dies können Einheitentests sein, wenn sie so geschrieben sind, dass Benutzer sie verstehen können (dh nicht in einen größeren Testrahmen eingebunden sind). Als netter Nebeneffekt machen Änderungen an der API die Samples kaputt, sodass sie auf dem neuesten Stand gehalten werden müssen.

Sie können eine API in Worten beschreiben, aber es gibt nichts Besseres, als den tatsächlichen Code zu sehen, um zu verstehen, wie man ihn verwendet.

  • Ja, das hatte ich in der Beispielvorlage. Es ist besonders nützlich in dem Kommentar, der eine Gruppe von APIs betrifft, um zu zeigen, wie sie zusammenarbeiten.

    – Andreas Johnson

    4. Juni 2009 um 21:28 Uhr

Benutzeravatar von Andy Dent
Andy Dent

Da ich Code auf Bildschirmen mit höherer Auflösung bearbeite, bin ich von der Verwendung des umgekehrten Schrägstrichs zum @-Präfix für Doxygen-Befehle übergegangen. Nicht so laut Backslash hat sich jetzt gefunden zu verdammt schwer, um die Doxygen-Befehle zu verstehen.

  • Ja, das hatte ich in der Beispielvorlage. Es ist besonders nützlich in dem Kommentar, der eine Gruppe von APIs betrifft, um zu zeigen, wie sie zusammenarbeiten.

    – Andreas Johnson

    4. Juni 2009 um 21:28 Uhr

Benutzeravatar von Andy Dent
Andy Dent

Wenn Sie sicher sind, dass Ihr Team einer so schwergewichtigen Vorlage folgen wird, verwenden Sie sie wie gezeigt.

Ansonsten sieht es aus wie JavaDoc. Eines der schönen Dinge an Doxygen ist, wie gut es seine Arbeit macht ohne so starkes Markup verwenden zu müssen. Sie müssen @name nicht verwenden und mit der JAVADOC_AUTOBRIEF-Einstellung können Sie @brief überspringen – stellen Sie einfach sicher, dass die erste Zeile des Kommentars eine angemessene kurze Beschreibung ist.

Ich bevorzuge aussagekräftige Namen, anstatt die Dokumentation zu erzwingen, und ermutige die Leute, Kommentare nur dann hinzuzufügen, wenn sie einen erheblichen Mehrwert bieten. So werden die wertvollen Kommentare nicht von all dem übertönt Lärm.

  • Wenn Sie versuchen, einer Vorlage zu folgen, erhalten Sie unweigerlich viele Kommentare wie “Dies ist eine kurze Beschreibung der Klasse” im tatsächlichen Code von Leuten, die vergessen, zurückzugehen und Dinge in die Kommentare einzufügen. Besser nichts als diese Art von Kommentaren.

    – Greg Rogers

    14. Januar 2009 um 22:50 Uhr

  • Das einzig Traurige daran, Dokumentation optional zu machen, ist, dass meiner Erfahrung nach Code einfach nicht dokumentiert wird. Wenn die Vorlage übermäßig größer ist als die meisten Dokumentationsblöcke, können Sie sie jederzeit ändern.

    – axs6791

    10. Februar 2009 um 20:17 Uhr

  • Wenn Sie die Dokumentation optional machen, haben Sie die Möglichkeit zu prüfen, ob sie hinzugefügt wurde, insbesondere eine schnelle Überprüfung mit Doxygen, das die Einstellungen ändert, um vor nicht dokumentierten Klassen zu warnen. Ich würde auch vorschlagen, die XML-Ausgabe von Doxygen zu verwenden, damit Sie Kommentare für allgemeine langweilige Zeichenfolgen analysieren können.

    – Andy Dent

    11. Februar 2009 um 1:20 Uhr

  • Wir versuchen, eine nicht zu große öffentliche API zu haben, und wir haben starke Codeüberprüfungen, damit die Leute den Vorlagen folgen und die Kommentare angemessen sind. Die Vorlagen, die wir verwenden, sind nicht so schwergewichtig wie die oben. Ein großer Block pro API-Header und ein leichter Block pro Funktion.

    – Andreas Johnson

    17. März 2009 um 14:59 Uhr

1444260cookie-checkBeste Tipps zum Dokumentieren von Code mit Doxygen? [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy