###関数形式マクロを使用してもドキュメントをdoxygenで出力したい
Windows・Cygwin環境下にて、C言語で開発を行なっています。
詳細設計レベルのドキュメントに関してはdoxygenで出力することになっているのですが、少々困っています。
下記に紹介するような複数行に渡る関数形式マクロを使用すると、2つの問題が発生してしまいました。
- 未知の定義
¥HOGE_MAX
が定義される(doxygen warningの発生) - 出力したHTMLドキュメントの関数mogeについて、
static void moge ( int c, int d )
の説明と、moge(x, MOO)
の説明の、2つの説明が表示される - 出力したHTMLドキュメントにHOGE_MAXの説明「影響を受ける記述」が表示されない
複数行に渡る関数形式マクロを使用しても、意図通りにdoxygenでドキュメントを出力するための方法はありますでしょうか。
###該当のソースコード
C
1 2static void hoge ( int a, int b ); 3static void moge ( int c, int d ); 4 5/** 6 * @def FOO (-1) 7 * 適当な説明 8 */ 9#define FOO (-1) 10 11/** 12 * @def MOO (1) 13 * 適当な説明 14 */ 15#define MOO (1) 16 17/** 18 * @def Hoge(x) 19 * 問題が発生する原因となるマクロ 20 */ 21#define Hoge(x) ¥ 22{ ¥ 23 hoge(x, FOO); ¥ 24 moge(x, MOO); ¥ 25} 26 27/** 28 * @def HOGE_MAX (0xFF) 29 * 影響を受ける記述 30 */ 31#define HOGE_MAX (0xFF) 32 33/** 34 * @brief 適当な説明 35 * 36 * @param[in] (a) 適当な説明 37 * @param[in] (b) 適当な説明 38 * @return - 39 */ 40static void hoge ( int a, int b ) 41{} 42 43/** 44 * @brief 適当な説明 45 * 46 * @param[in] (c) 適当な説明 47 * @param[in] (d) 適当な説明 48 * @return - 49 */ 50static void moge ( int c, int d ); 51{}
表示されたエラーメッセージ
Searching for documented defines...
hoge.c:12: warning: documentation for unknown define ¥HOGE_MAX found.
関数形式マクロの改行に使用した¥
が後の@def
に影響を与えているようです。
###試したこと
試したことその1
C
1 2static void hoge ( int a, int b ); 3static void moge ( int c, int d ); 4 5/** 6 * @def FOO 7 * 適当な説明 8 */ 9#define FOO (-1) 10 11/** 12 * @def MOO 13 * 適当な説明 14 */ 15#define MOO (1) 16 17/** 18 * @def Hoge(x) 19 * 適当な説明 20 */ 21#define Hoge(x) ¥ 22{ ¥ 23 hoge(x, FOO); ¥ 24 moge(x, MOO); ¥ 25} 26 27/** @def */ /* <---- このコメントを追加 */ 28 29/** 30 * @def HOGE_MAX (0xFF) 31 * ほげ最大値 32 */ 33#define HOGE_MAX (0xFF) 34 35/** 36 * @brief 適当な説明 37 * 38 * @param[in] (a) 適当な説明 39 * @param[in] (b) 適当な説明 40 * @return - 41 */ 42static void hoge ( int a, int b ) 43{} 44 45/** 46 * @brief 適当な説明 47 * 48 * @param[in] (c) 適当な説明 49 * @param[in] (d) 適当な説明 50 * @return - 51 */ 52static void moge ( int c, int d ); 53{}
コメント/** @def */
を追加すると、ワーニングは消えました。
(問題点1は解消されました)
どういう作用によるものかはわかっていません。
(正しく書くなら/** * @def */だと思いますが、これでは解消されませんでした)
(@defの代わりに@fnでは解消されませんでした)
問題点2は解消されませんでした。
問題点3も解消されませんでした。
試したことその2
回答で頂いたセミコロンを追加する案を試してみました。
C
1 2static void hoge ( int a, int b ); 3static void moge ( int c, int d ); 4 5/** 6 * @def FOO 7 * 適当な説明 8 */ 9#define FOO (-1) 10 11/** 12 * @def MOO 13 * 適当な説明 14 */ 15#define MOO (1) 16 17/** 18 * @def Hoge(x) 19 * 適当な説明 20 */ 21#define Hoge(x) ¥ 22{ ¥ 23 hoge(x, FOO); ¥ 24 moge(x, MOO); ¥ 25} 26 27; /* <---- このセミコロンを追加 */ 28 29/** 30 * @def HOGE_MAX (0xFF) 31 * ほげ最大値 32 */ 33#define HOGE_MAX (0xFF) 34 35/** 36 * @brief 適当な説明 37 * 38 * @param[in] (a) 適当な説明 39 * @param[in] (b) 適当な説明 40 * @return - 41 */ 42static void hoge ( int a, int b ) 43{} 44 45/** 46 * @brief 適当な説明 47 * 48 * @param[in] (c) 適当な説明 49 * @param[in] (d) 適当な説明 50 * @return - 51 */ 52static void moge ( int c, int d ); 53{}
セミコロンを追加した場合、問題点1は解消されます。
しかし、代わりに、HTMLドキュメントに変数¥
が出力されるようになってしましました。
また、問題点2、問題点3は解消されませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Windows
Cygwin
C言語
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/14 14:18
2017/09/14 15:05
2017/09/15 08:04
2017/09/17 06:39
2017/09/21 08:13