【问题标题】:Documenting variables with Doxygen in C在 C 中使用 Doxygen 记录变量
【发布时间】:2011-01-05 02:40:50
【问题描述】:

代码:

#include <stdio.h>

/*
 * \var int iOne
 * \brief Integer 1
 */
/*
 * \var int iTwo
 * \brief Integer 2
 */
/*
 * \var int iThree
 * \brief Integer 3
 */

/**
 * \brief Imitates a sheep.
 */
void sheep();

/**
 * \brief Main function for test code
 */
int main() {
    int iOne, iTwo, iThree;
    iOne = 1;
    iTwo = 2;
    iThree = 3;
    printf("%d %d %d", iOne, iTwo, iThree);

    return 0;
}

void sheep() {
    printf("Meeeh");
}

这不会生成iOneiTwoiThree 的描述,尽管这是我的意图。我该如何解决这个问题?

【问题讨论】:

    标签: objective-c c doxygen


    【解决方案1】:

    DOxygen 用于记录类和函数头,或者换句话说,接口。将文档视为其他程序员为了正确使用您的类和函数而学习的东西。你不应该使用 DOxygen 来记录你的实现。相反,请使用 ///* */ 在源中记录您的局部变量。

    在 DOxygen 中有多种方法可以制作 cmets,其中一些示例(对于成员变量)可以在手册 here 中看到。我在下面复制了它们。

    int var; /*!< Detailed description after the member */
    
    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
    

    【讨论】:

    • 我觉得有点令人困惑,您首先解释 Doxygen 不应该用于此,然后显示 Doxygen 为记录它提供的全部支持。您是否有任何消息来源表明 Doxygen 旨在记录“界面”而不是其余部分?
    • 我提供的 sn-p 显示了记录作为“文件、结构、联合、类或枚举”成员的变量的方法。由于 OP 的 iOne, iTwo, iThree 变量是 main() 的内部变量,因此它们无法在任何接口级别范围内访问,因此 Doxygen 不会记录它们。换一种说法:Doxygen 不会也不应该生成解释变量 i 在声明 for(int i=0;i&lt;10;i++) 中的作用的文档,因为 i 的范围太有限以至于没有意义。
    • 我现在明白了。谢谢!
    【解决方案2】:

    您需要使用 /** 将您的 cmets 作为 Doxygen cmets 打开。

    不过,这样做可能更清楚:

    int main() {
       /** \brief Integer 1 */
       int iOne;
       /** \brief Integer 2 */
       int iTwo;
       /** \brief Integer 3 */
       int iThree;
       /** ... and so on ... */
    }
    

    这样您可以在不破坏文档的情况下更改变量的名称,并且对于需要阅读您的源代码的其他程序员来说也更容易,因为变量的描述位于它旁边,而不是文件中的其他位置。

    【讨论】:

    • 感谢您的建议。你的代码更有意义是对的,但我想知道如何在我的代码中正确地执行 \var 定义。这样做的正确方法是什么?
    • Pieter:首先,我认为您需要记录文件本身 (/** @file */ ),然后正如我在回答中所说,我认为 Doxygen 不能记录局部变量。跨度>
    • 我认为这行不通,因为它们是局部变量。你应该改进这个答案,因为现在它具有误导性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2012-02-11
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多