2011-11-07 9 views
2

最近、MACROSを使用してコンパイル時に推奨されなくなったコードにラベルを付けるコードが追加されました。 Doxygenは廃止された関数を正しく文書化していません。Doxygenを使用してMACRO C++に送信される関数を文書化

#if defined(__GNUC__) 
    #define DEPRECATED(func) func __attribute__((deprecated)) /**< mark a function as deprecated in gcc. */ 

    #elif defined(_MSC_VER) 
    #define DEPRECATED(func) __declspec(deprecated) func /**< mark a function as deprecated in msvc. */ 
    #endif 

注これがこの記事のためのマクロの簡易版で、実際のマクロは、コンパイラのバージョンチェックになどを行う

その後マクロは、コンパイラは、関数があったことを知らせるための機能を中心に使用されていますコンパイラの警告が発行されるようになりました。

/** 
    * myMethod() is deprecated. 
    */ 
    DEPRECATED(
     /** 
     * @deprecated 
     * Description of deprecated function 
     * 
     * @param var this is a parameter 
     * 
     * @return this is returned 
     */ 
     int myMethod(int var) 
    ); 

問題はDoxygenのではないMyMethodは(int型VAR)非推奨のドキュメントを表示したいということです。

DoxygenでmyMethodを文書化する方法は知っていますが、マクロでは使用できません。

答えて

3

doxygenにDEPRECATEDマクロを削除する必要があることを伝える必要があります。あなたは、設定ファイルに以下のプリプロセッサオプションを使用してこの操作を行うことができます。

ENABLE_PREPROCESSING = YES 
MACRO_EXPANSION  = YES 
EXPAND_ONLY_PREDEF  = YES 
PREDEFINED    = "DEPRECATED(x)=x" 

あなたは-d Preprocessorオプションでdoxygenをを実行することにより、前処理の結果をデバッグすることができます。このオプションが存在すると、Doxygenは前処理が実行された後に入力ファイルを出力にダンプします。

詳細はhttp://www.doxygen.org/preprocessing.html

+0

私は実際に同じ解決策を見つけて、それを投稿しようとしていました。 PREDEFINEDについての注記は、正しい結果を与えなかった引用符を除いて、値を "DEPRECATED(x)= x"にする必要があります。あなたのソリューションに与えられたリンクは、私が解決策を見つけた方法でした。ありがとう:) – gnash117

1

@fn tagを使用して、ブロックが何を参照しているかを明示します。暗黙的な接続ほど便利ではありませんが、より安全です。

+0

私が試した最初のことでした。それがうまくいけば私はここに投稿していないでしょう。 @fnタグを使用する際の問題は、Doxygenがその関数を見る必要があることです。 – gnash117

+0

@fnタグは、ドキュメントを関数から分離するためのものです。そうではないので、Doxygenは存在しないと考える関数を文書化することはできません。 Doxygenがドキュメントを適用する前にDEPRICATEDマクロを処理するように、MACRO_EXPANSIONオプションを変更しようとしました。私はそれが正しい方向だと思うが、私はそれを働かせることができなかった。 – gnash117

関連する問題