この章では2つのトピックを扱います
特別なコメントブロックは、C または C++ スタイルのコメントブロックにいくつかの追加マーキングを施したもので、Doxygen はそれを生成されたドキュメントに含める必要のある構造化テキストの一部として認識します。次のセクションでは、Doxygen でサポートされているさまざまなスタイルを紹介します。
Python、VHDL、および Fortran コードの場合、コメント規則が異なります。これについては、それぞれセクション Python におけるコメントブロック、VHDL におけるコメントブロック、および Fortran におけるコメントブロック を参照してください。
コード内の各エンティティには、2 つ (場合によっては 3 つ) のタイプの記述があり、それらがまとめてそのエンティティのドキュメントを構成します。短い説明と詳細な説明があり、どちらもオプションです。メソッドと関数の場合、3 番目のタイプの記述であるインボディ記述もあります。これは、メソッドまたは関数の本体内で見つかったすべてのコメントブロックの連結で構成されます。
複数の短いまたは詳細な説明を持つことは許可されています (ただし、説明が表示される順序は指定されていないため、推奨されません)。
名前が示すように、短い説明は短い1行の説明であり、詳細な説明はより長く、より詳細なドキュメントを提供します。「インボディ」記述は、詳細な説明として機能することも、実装の詳細のコレクションを記述することもできます。HTML 出力の場合、短い説明は、アイテムが参照されている場所にツールチップを提供するためにも使用されます。
コメントブロックを詳細な説明としてマークするには、いくつかの方法があります
Javadoc スタイルを使用できます。これは、次のように、2 つの * で始まる C スタイルのコメントブロックで構成されます
/** * ... text ... */
または、Qt スタイルを使用して、C スタイルのコメントブロックの開始後に感嘆符 (!) を追加することもできます。次の例に示すように
/*! * ... text ... */
どちらの場合も、中間の * はオプションであるため、
/*! ... text ... */
も有効です。
3 番目の代替案は、少なくとも 2 行の C++ コメント行を使用することです。各行は、追加のスラッシュまたは感嘆符で始まります。2 つのケースの例を次に示します
/// /// ... text ... ///
または
//! //!... text ... //!
この場合、空白行はドキュメントブロックを終了することに注意してください。
ドキュメント内でコメントブロックをより目立たせたい人もいます。この目的のために、次を使用できます
/*******************************************//** * ... text ***********************************************/
注: 通常のコメントブロックを終了し、特別なコメントブロックを開始するための 2 つのスラッシュ。
注: clang-format のようなリフォーマッタを使用する場合は注意してください。このタイプのコメントを 2 つの別々のコメントとして認識し、それらの間にスペースを挿入する可能性があります。
または
///////////////////////////////////////////////// /// ... text ... /////////////////////////////////////////////////
または
/*********************************************** * ... text ***********************************************/
JAVADOC_BANNER が YES
に設定されている限り。
Doxygen によって生成された対応する HTML ドキュメントについては、こちらをクリックしてください。
短い説明には、いくつかの可能性があります
上記のコメントブロックのいずれかで \brief コマンドを使用できます。このコマンドは段落の終わりで終了するため、詳細な説明は空行の後に続きます。
例を次に示します
/*! \brief Brief description. * Brief description continued. * * Detailed description starts here. */
設定ファイルで JAVADOC_AUTOBRIEF が YES
に設定されている場合、Javadoc スタイルのコメントブロックを使用すると、自動的に短い説明が開始され、最初のドット、疑問符、または感嘆符の後にスペースまたは改行が続くところで終了します。例を次に示します
/** Brief description which ends at this dot. Details follow * here. */
このオプションは、複数行の特別な C++ コメントでも同じ効果があります
/// Brief description which ends at this dot. Details follow /// here.
3 番目のオプションは、1 行を超えない特別な C++ スタイル コメントを使用することです。2 つの例を次に示します
/// Brief description. /** Detailed description. */
または
//! Brief description. //! Detailed description //! starts here.
最後の例では、短い説明と詳細な説明を含むブロックを分離するために必要な空白行に注意してください。JAVADOC_AUTOBRIEF もこの場合は NO
に設定する必要があります。
ご覧のとおり、Doxygen は非常に柔軟です。次の例のように、複数の詳細な説明がある場合
//! Brief description, which is //! really a detailed description since it spans multiple lines. /*! Another detailed description! */
それらは結合されます。説明がコード内の異なる場所にある場合も同様であることに注意してください! この場合、順序は Doxygen がコードを解析する順序によって異なります。
他のほとんどのドキュメントシステムとは異なり、Doxygen では、メンバー (グローバル関数を含む) のドキュメントを定義の前に配置することもできます。これにより、ドキュメントをヘッダーファイルではなくソースファイルに配置できます。これにより、ヘッダーファイルをコンパクトに保ち、メンバーの実装者がドキュメントに直接アクセスできるようになります。妥協案として、短い説明を宣言の前に、詳細な説明をメンバー定義の前に配置することができます。
ファイル、構造体、共用体、クラス、または列挙型のメンバーをドキュメント化する場合、ドキュメントブロックをメンバーの前ではなく後に配置したい場合があります。この目的のために、コメントブロックに追加の < マーカーを配置する必要があります。これは関数のパラメータにも適用されることに注意してください。
いくつかの例を次に示します
int var; /*!< Detailed description after the member */
このブロックは、Qt スタイルの詳細なドキュメントブロックをメンバーの後に配置するために使用できます。同じことを行う他の方法は次のとおりです
int var; /**< Detailed description after the member */
または
int var; //!< Detailed description after the member //!<
または
int var; ///< Detailed description after the member ///<
ほとんどの場合、メンバーの後に短い説明のみを配置したいと考えています。これは次のように行います
int var; //!< Brief description after the member
または
int var; ///< Brief description after the member
関数の場合、@param コマンドを使用してパラメータをドキュメント化し、[in]
、[out]
、[in,out]
を使用して方向をドキュメント化できます。インラインドキュメントの場合、方向属性で開始することによっても可能です。例:
void foo(int v /**< [in] docs for input parameter v. */);
これらのブロックは、前のセクションの特別なコメントブロックと同じ構造と意味を持っていることに注意してください。< は、メンバーがブロックの後ろではなくブロックの前にあることを示しているだけです。
これらのコメントブロックの使用例を次に示します
Doxygen によって生成された対応する HTML ドキュメントについては、こちらをクリックしてください。
\class
など) は、これらのコメントブロック内では許可されていません。YES
に設定されている場合、マクロが適用される場所でコメントも置換され、このコメントはマクロ定義自体のドキュメントではなく、最後に検出された項目のドキュメントとして使用されるため、マクロ定義の一部としてこの構造を使用する場合は注意してください!Qt スタイルを使用したドキュメント化された C++ コードの例を次に示します
Doxygen によって生成された対応する HTML ドキュメントについては、こちらをクリックしてください。
短い説明は、クラス、名前空間、またはファイルのメンバー概要に含まれており、小さなイタリック体フォントを使用して印刷されます (この説明は、設定ファイルで BRIEF_MEMBER_DESC を NO
に設定することで非表示にできます)。デフォルトでは、短い説明は詳細な説明の最初の文になります (REPEAT_BRIEF タグを NO
に設定することで変更できます)。短い説明と詳細な説明はどちらも、Qt スタイルではオプションです。
デフォルトでは、Javadoc スタイルのドキュメントブロックは Qt スタイルのドキュメントブロックと同じように動作します。これは Javadoc 仕様には準拠していませんが、ドキュメントブロックの最初の文は短い説明として自動的に扱われます。この動作を有効にするには、設定ファイルで JAVADOC_AUTOBRIEF を YES に設定する必要があります。このオプションを有効にして、文の途中にドットを句読点として使用せずに配置する場合は、バックスラッシュとスペースをその後に配置する必要があります。例を次に示します
/** Brief description (e.g.\ using only a few words). Details follow. */
上記と同じコードを次に示します。今回は Javadoc スタイルでドキュメント化され、JAVADOC_AUTOBRIEF が YES に設定されています
Doxygen によって生成された対応する HTML ドキュメントについては、こちらをクリックしてください。
同様に、Qt スタイルのドキュメントブロックの最初の文を短い説明として自動的に処理する場合は、設定ファイルで QT_AUTOBRIEF を YES に設定できます。
前のセクションの例では、コメントブロックは常に、ファイル、クラス、または名前空間の宣言または定義の前、またはそのメンバーの 1 つの前または後に配置されていました。これは多くの場合快適ですが、ドキュメントを他の場所に配置する理由がある場合もあります。ファイルをドキュメント化する場合、ファイルの「前」のようなものがないため、これは必須です。
Doxygen では、ドキュメントブロックを実質的にどこにでも配置できます (例外は、関数の本体内または通常の C スタイル コメントブロック内です)。
アイテムの直前 (または直後) にドキュメントブロックを配置しないことの代償は、ドキュメントブロック内に構造コマンドを配置する必要があることであり、情報の重複につながります。したがって、実際には、他の要件で強制されない限り、構造コマンドの使用を避ける必要があります。
構造コマンド (他のすべてのコマンドと同様) は、バックスラッシュ (\
) またはアットマーク (@
) (Javadoc スタイルを好む場合) で始まり、その後にコマンド名と 1 つ以上のパラメータが続きます。たとえば、上記の例のクラス Test
をドキュメント化する場合は、Doxygen が読み取る入力のどこかに次のドキュメントブロックを配置することもできます
/*! \class Test \brief A test class. A more detailed class description. */
ここでは、特別なコマンド \class
を使用して、コメントブロックにクラス Test
のドキュメントが含まれていることを示しています。その他の構造コマンドは次のとおりです
\struct
。\union
。\enum
。\fn
。\var
。\def
。\typedef
。\file
。\namespace
。\package
。\interface
。これらのコマンドおよびその他の多くのコマンドの詳細については、セクション 特殊コマンド を参照してください。
C++ クラスのメンバーをドキュメント化するには、クラス自体もドキュメント化する必要があります。名前空間についても同様です。グローバル C 関数、typedef、列挙型、またはプリプロセッサ定義をドキュメント化するには、まずそれらを含むファイル (通常はヘッダーファイルになります。そのファイルには、他のソースファイルにエクスポートされる情報が含まれているため) をドキュメント化する必要があります。
/*! \file */または
/** @file */このファイルに 1 行必要です。
構造コマンドを使用してドキュメント化された structcmd.h
という名前の C ヘッダーの例を次に示します
Doxygen によって生成された対応する HTML ドキュメントについては、こちらをクリックしてください。
上記の例の各コメントブロックには構造コマンドが含まれているため、すべてのコメントブロックを別の場所または入力ファイル (たとえばソースファイル) に移動しても、生成されるドキュメントには影響しません。このアプローチの欠点は、プロトタイプが重複するため、すべての変更を 2 回行う必要があることです! このため、最初に本当に必要なのかどうかを検討し、可能な場合は構造コマンドを避ける必要があります。関数 の前に配置されたコメントブロックに \fn コマンドが含まれている例をよく受け取ります。これは明らかに \fn コマンドが冗長であり、問題を引き起こすだけのケースです。
次の拡張子 .dox
、.txt
、.doc
、.md
、または .markdown
のいずれかを持つファイルにコメントブロックを配置した場合、または拡張子が EXTENSION_MAPPING によって md
にマップされている場合、Doxygen はこのファイルをファイルリストから非表示にします。
Doxygen が解析できないが、それでもドキュメント化したいファイルがある場合は、\verbinclude を使用してそのまま表示できます。たとえば、
/*! \file myscript.sh * Look at this nice script: * \verbinclude myscript.sh */
スクリプトが INPUT に明示的にリストされていること、または FILE_PATTERNS に .sh
拡張子が含まれており、スクリプトが EXAMPLE_PATH を介して設定されたパスで見つけることができることを確認してください。
Python の場合、コードをドキュメント化する標準的な方法として、ドキュメンテーション文字列 ("""
) を使用する方法があります。このような文字列は __doc__
に格納され、実行時に取得できます。Doxygen はこのようなコメントを抽出し、事前にフォーマットされた方法で表現する必要があると想定します。
Doxygen によって生成された対応する HTML ドキュメントについては、こちらをクリックしてください。
"""
を使用する場合、Doxygen の 特殊コマンド はサポートされておらず、テキストはリテラルテキストとして表示されます (\verbatim を参照)。Doxygen の 特殊コマンド を使用して、テキストを """
の代わりに通常のドキュメントとして表示するには、"""!
を使用するか、設定ファイルで PYTHON_DOCSTRING を NO
に設定します。"""
の代わりに '''
を使用することもできます。Python コードをドキュメント化する別の方法として、"##" または "##<" で始まるコメントを使用する方法もあります。これらのタイプのコメントブロックは、Doxygen でサポートされている他の言語のドキュメントブロックの動作方法とより一致しており、特殊コマンドの使用も可能です。
同じ例をもう一度示しますが、今度は Doxygen スタイルのコメントを使用しています
Doxygen によって生成された対応する HTML ドキュメントについては、こちらをクリックしてください。
python は C や C++ よりも Java に似ているため、設定ファイルで OPTIMIZE_OUTPUT_JAVA を YES
に設定する必要があります。
VHDL の場合、コメントは通常 "--" で始まります。Doxygen は "--!" で始まるコメントを抽出します。VHDL には 2 つのタイプのコメントブロックしかありません。短い説明を表す 1 行の "--!" コメントと、詳細な説明を表す複数行の "--!" コメント (各行に "--!" プレフィックスが繰り返されます)。
コメントは常に、ドキュメント化される項目の前に配置されます。ただし、ポートの場合は例外で、項目の後にコメントを配置することもでき、その場合はポートの短い説明として扱われます。
Doxygen コメントを含む VHDL ファイルの例を次に示します
Doxygen によって生成された対応する HTML ドキュメントについては、こちらをクリックしてください。
VHDL 2008 以降では、/
*
スタイル コメントを使用することもできます。
Doxygen は /
* ... *
/
をプレーンコメントとして処理し、/
*! ... *
/
スタイル コメントを Doxygen によって解析される特殊コメントとして処理します。
適切な外観の出力を得るには、設定ファイルで OPTIMIZE_OUTPUT_VHDL を YES
に設定する必要があります。これは、他の多くの設定にも影響します。それらがまだ正しく設定されていない場合、Doxygen はどの設定が上書きされたかを伝える警告を生成します。
Fortran コードに Doxygen を使用する場合は、OPTIMIZE_FOR_FORTRAN を YES
に設定する必要があります。
パーサーは、ソースコードが固定形式 Fortran コードか自由形式 Fortran コードかを推測しようとします。これは常に正しいとは限りません。正しくない場合は、EXTENSION_MAPPING を使用して修正する必要があります。EXTENSION_MAPPING = f=FortranFixed f90=FortranFree
を設定すると、拡張子 f
のファイルは固定形式 Fortran コードとして解釈され、拡張子 f90
のファイルは自由形式 Fortran コードとして解釈されます。
Fortran の場合、"!>" または "!<" はコメントを開始し、"!!" または "!>" は 1 行コメントを複数行コメントに継続するために使用できます。
ドキュメント化された Fortran サブルーチンの例を次に示します
代替として、固定形式コードでコメントを使用することもできます
前のセクションでは、コード内のコメントを Doxygen に認識させる方法に焦点を当て、短い説明と詳細な説明の違い、および構造コマンドの使用について説明しました。
このセクションでは、コメントブロック自体の内容を見ていきます。
Doxygen は、コメントのフォーマットのさまざまなスタイルをサポートしています。
最も単純な形式は、プレーンテキストを使用することです。これは出力にそのまま表示され、短い説明に最適です。
より長い説明の場合、リテラルテキストのブロック、リスト、または単純なテーブルなど、より多くの構造が必要になることがよくあります。このために、Doxygen は Markdown 構文をサポートしており、Markdown Extra 拡張機能の一部も含まれています。
Markdown は、非常に読みやすく、書きやすいように設計されています。そのフォーマットは、プレーンテキストメールに触発されています。Markdown は、プロジェクトの紹介ページのような、シンプルで汎用的なフォーマットに最適です。Doxygen は、markdown ファイルの直接読み取りもサポートしています。詳細については、第 Markdown サポート 章を参照してください。
プログラミング言語固有のフォーマットの場合、Doxygen には Markdown フォーマットの上に 2 つの形式の追加マークアップがあります。
それでも十分でない場合、Doxygen は HTML コマンド のサブセット HTML マークアップ言語もサポートしています。