標註總述
下載國外的源代碼,往往能看到附帶的說明文檔,文檔都有詳細的說明,大部分文檔都可以通過doxygen這個跨平臺軟件生成,doxygen並不能隨便讀取你的C++的註釋,必須按照一定的規則才能生成,所以在編寫代碼時,一定要按照標準寫註釋,否則會爲以後帶來許多麻煩
下面介紹C++的標註寫法,c++不推薦c語言式的/* */風格註釋,這裏,除了文件頭使用這種註釋外其餘到使用C++風格的註釋。
先看看總述:
文件頭:
[cpp] view plaincopy
[cpp] view plaincopy
-
/*!
-
* \file Ctext.h
-
* \brief 概述
-
*
-
*詳細概述
-
*
-
* \author 作者名字
-
* \version 版本號(maj.min,主版本.分版本格式)
-
* \date 日期
-
*/
命名空間:
[cpp] view plaincopy
-
/// \brief 命名空間的簡單概述
-
///
-
///命名空間的詳細概述
-
namespace text
-
{
-
……
-
}
類說明:
[cpp] view plaincopy
-
/// \brief Ctext的doxygen測試
-
///
-
/// 作doxygen測試用
-
class Ctext
-
{
-
}
函數標註
方法1:
[cpp] view plaincopy
-
/// \brief 函數簡要說明-測試函數
-
/// \param n1 參數1
-
/// \param c2 參數2
-
/// \return 返回說明
-
bool text(int n1,Ctext c2);
方法2:
[cpp] view plaincopy
-
/// \brief 函數簡要說明-測試函數
-
///
-
/// 函數詳細說明,這裏寫函數的詳細說明信息,說明可以換行
-
/// ,如這裏所示,同時需要注意的是詳細說明和簡要說明之間必須空一行
-
/// ,詳細說明之前不需要任何標識符
-
/// \param n1 參數1說明
-
/// \param c2 參數2說明
-
/// \return 返回說明
-
/// \see text
-
bool text2(int n1,Ctext c2);
變量及枚舉
[cpp] view plaincopy
-
int m_a; ///< 成員變量1m_a說明
-
double m_b; ///< 成員變量2m_b說明
-
-
-
/// \brief 成員變量m_c簡要說明
-
///
-
/// 成員變量m_c的詳細說明,這裏可以對變量進行
-
///詳細的說明和描述,具體方法和函數的標註是一樣的
-
float m_c;
-
-
-
/// \brief xxx枚舉變量的簡要說明
-
///
-
/// xxx枚舉變量的詳細說明--枚舉變量的詳細說明和函數的詳細說明
-
///的寫法是一致的。每個枚舉變量下可以進行單獨說明
-
enum{
-
em_1,///< 枚舉值1的說明
-
em_2,///< 枚舉值2的說明
-
em_3 ///< 枚舉值3的說明
-
};
[cpp] view plaincopy
-
/*!
-
* \file Ctext.h
-
* \brief 概述
-
*
-
*詳細概述
-
*
-
* \author 作者,包含email等
-
* \version 版本號(maj.min,主版本.分版本格式)
-
* \date 日期
-
*/
上註釋等下於下面這種寫法
[cpp] view plaincopy
-
/*!
-
\file Ctext.h
-
\brief 概述
-
詳細概述
-
\author 作者,包含email等
-
\version 版本號(maj.min,主版本.分版本格式)
-
\date 日期
-
*/
對於vs編譯器可能中間那行*號比較麻煩,可以不寫,對於Qt這種要去掉中間的*號反而是件麻煩事就不用去掉
用doxygen生成註釋如下效果
命名空間說明如下寫
[cpp] view plaincopy
-
/// \brief 命名空間的簡單概述
-
///
-
///命名空間的詳細概述
-
namespace text
-
{
-
-
}
doxygen的說明寫法都是類似於
[cpp] view plaincopy
-
/// \brief
-
///
-
///
以下將會見到很多這樣的寫法
上註釋的doxygen效果如下
3. 類說明
類的註釋和函數一樣,
[cpp] view plaincopy
-
/// \brief Ctext的doxygen測試
-
///
-
/// 作doxygen測試用
-
class Ctext
-
{
-
}
上註釋用doxygen生成文檔效果如下:
函數詳細註釋位於頭文件,cpp文件只對函數做簡明註釋
cpp文件不做///的註釋,否則會和頭文件重疊
[cpp] view plaincopy
-
/// \brief 函數簡要說明-測試函數
-
/// \param n1 參數1
-
/// \param c2 參數2
-
/// \return 返回說明
-
bool text(int n1,Ctext c2);
簡要註釋此註釋會讓doxygen生成函數簡要說明和參數說明
生成結果如:
4.2 函數簡要說明+詳細說明
[cpp] view plaincopy
-
/// \brief 函數簡要說明-測試函數
-
///
-
/// 函數詳細說明,這裏寫函數的詳細說明信息,說明可以換行
-
/// ,如這裏所示,同時需要注意的是詳細說明和簡要說明之間必須空一行
-
/// ,詳細說明之前不需要任何標識符
-
/// \param n1 參數1說明
-
/// \param c2 參數2說明
-
/// \return 返回說明
-
bool text2(int n1,Ctext c2);
上註釋用doxygen生成文檔效果如下:
4.3 不帶簡要說明的函數標註
[cpp] view plaincopy
-
/// 函數說明-測試函數
-
///
-
/// 函數詳細說明,這裏寫函數的詳細說明信息,說明可以換行
-
/// ,如這裏所示,同時需要注意的是詳細說明和簡要說明之間必須空一行
-
/// ,詳細說明之前不需要任何標識符
-
/// \param n1 參數1說明
-
/// \param c2 參數2說明
-
/// \return 返回說明
-
bool text3(int n1,Ctext c2);
上註釋用doxygen生成文檔效果如下:
這裏沒有說明
4.4 帶參見的寫法
[cpp] view plaincopy
-
/// \brief 函數說明-測試函數4
-
/// \param n1 參數1說明
-
/// \param c2 參數2說明
-
/// \return 返回說明
-
/// \see text3 text2 text
-
bool text4(int n1,Ctext c2);
上註釋用doxygen生成文檔效果如下:
\see 上可以帶中文等說明,doxygen會自動識別代碼裏存在的函數
5.變量註釋
變量註釋用///< 對變量進行說明,對於詳細信息可以加\brief
[cpp] view plaincopy
-
int m_a; ///< 成員變量1m_a說明
-
double m_b; ///< 成員變量2m_b說明
-
-
/// \brief 成員變量m_c簡要說明
-
///
-
/// 成員變量m_c的詳細說明,這裏可以對變量進行
-
///詳細的說明和描述,具體方法和函數的標註是一樣的
-
float m_c;
如果變量需要詳細說明的可已按照m_c的寫法寫,注意,m_b和m_c之間一定需要空行,否則會導致m_b的簡述消失
上註釋用doxygen生成文檔的具體效果如下
6.枚舉
枚舉變量的標註方法如下
[cpp] view plaincopy
-
/// \brief xxx枚舉變量的簡要說明
-
///
-
/// xxx枚舉變量的詳細說明--枚舉變量的詳細說明和函數的詳細說明
-
///的寫法是一致的。每個枚舉變量下可以進行單獨說明
-
enum{
-
em_1,///< 枚舉值1的說明
-
em_2,///< 枚舉值2的說明
-
em_3 ///< 枚舉值3的說明
-
};
枚舉的總體說明和函數的寫法一致,每個枚舉變量的說明和變量的說明寫法一致
上註釋用doxygen生成效果如下:
7.doxygen的設置和中文問題
7.1 生成私有成員
如果想生成私有成員(doxygen默認不生成私有成員),可以如下設置
選擇Expert標籤的Build項,勾選EXTRACT_PRIVATE即可
7.2 中文問題中文有時候是亂碼
對於vs2010的文檔,默認是gb2312,可以設置
Expert標籤的Project項目的DOXYFILE_ENCODING 爲 GB18030
INPUT_ENCODING 爲 GB18030
另外Project項目的生成語言(OUTPUT_LANGUAGE)選擇Chinese
對於其他的代碼文件如果中文亂碼,可以用文本編輯器轉換代碼文本編碼爲UTF-8帶BOM的(注意這有可能影響代碼,所以轉換編碼時要備份),再進行導出。
vs2010 等編譯器並不能像Qt Creator那樣生成上述標註樣式,但是可以集成到vs的工具欄裏,集成方法如下圖所示:
這樣在標註時可以直接從工具箱拖曳了,非常方便
[cpp] view plaincopy
-
/*!
-
* \file Ctext.h
-
* \brief 概述
-
*
-
*詳細概述
-
*
-
* \author 作者,包含email等
-
* \version 版本號(maj.min,主版本.分版本格式)
-
* \date 日期
-
*/
-
-
#pragma once
-
/// \brief 命名空間的簡單概述
-
///
-
///命名空間的詳細概述
-
namespace text
-
{
-
-
}
-
-
/// \brief Ctext的doxygen測試
-
///
-
/// 作doxygen測試用
-
class Ctext
-
{
-
public:
-
Ctext(void);
-
~Ctext(void);
-
/// \brief 函數簡要說明-測試函數
-
/// \param n1 參數1說明
-
/// \param c2 參數2說明
-
/// \return 返回說明
-
bool text(int n1,Ctext c2);
-
/// \brief 函數簡要說明-測試函數
-
///
-
/// 函數詳細說明,這裏寫函數的詳細說明信息,說明可以換行
-
/// ,如這裏所示,同時需要注意的是詳細說明和簡要說明之間必須空一行
-
/// ,詳細說明之前不需要任何標識符
-
/// \param n1 參數1說明
-
/// \param c2 參數2說明
-
/// \return 返回說明
-
bool text2(int n1,Ctext c2);
-
/// 函數說明-測試函數
-
///
-
/// 函數詳細說明,這裏寫函數的詳細說明信息,說明可以換行
-
/// ,如這裏所示,同時需要注意的是詳細說明和簡要說明之間必須空一行
-
/// ,詳細說明之前不需要任何標識符
-
/// \param n1 參數1說明
-
/// \param c2 參數2說明
-
/// \return 返回說明
-
bool text3(int n1,Ctext c2);
-
/// \brief 函數說明-測試函數4
-
/// \param n1 參數1說明
-
/// \param c2 參數2說明
-
/// \return 返回說明
-
/// \see text3 text2 text
-
bool text4(int n1,Ctext c2);
-
-
int m_a; ///< 成員變量1m_a說明
-
double m_b; ///< 成員變量2m_b說明
-
-
/// \brief 成員變量m_c簡要說明
-
///
-
/// 成員變量m_c的詳細說明,這裏可以對變量進行
-
///詳細的說明和描述,具體方法和函數的標註是一樣的
-
float m_c;
-
-
/// \brief xxx枚舉變量的簡要說明
-
///
-
/// xxx枚舉變量的詳細說明--枚舉變量的詳細說明和函數的詳細說明
-
///的寫法是一致的。每個枚舉變量下可以進行單獨說明
-
enum{
-
em_1,///< 枚舉值1的說明
-
em_2,///< 枚舉值2的說明
-
em_3 ///< 枚舉值3的說明
-
};
-
};