C 记录结构成员的宏(使用doxygen)

C 记录结构成员的宏(使用doxygen),c,doxygen,C,Doxygen,我更喜欢在结构定义中定义某些宏,因此很容易看到给定成员的可能值。例如: typedef struct foo_t { uint16_t flags; #define FOO_FLAG_BELL 0x0001 #define FOO_FLAG_BOOK 0x0002 #define FOO_FLAG_CANDLE 0x0004 #define FOO_FLAG_LANTERN 0x0008

我更喜欢在结构定义中定义某些宏,因此很容易看到给定成员的可能值。例如:

typedef struct foo_t {
    uint16_t flags;
        #define FOO_FLAG_BELL       0x0001
        #define FOO_FLAG_BOOK       0x0002
        #define FOO_FLAG_CANDLE     0x0004
        #define FOO_FLAG_LANTERN    0x0008
}
Doxygen希望在顶部列出这些宏以及所有其他宏。我已经使用分组标记(
/@{
/@}
)将这些宏分组在一起,并使用
foo\u t.flags
将组命名,但我想找到一种将值与结构更紧密关联的方法。我是否应该使用
\link
\endlink
以某种方式链接到该组名称

使用枚举

typedef struct foo_t {
  enum flag_define { 
    FOO_FLAG_BELL    =  0x0001,    /**< The flag for the bell or whatever. */
    FOO_FLAG_BOOK    =  0x0002,
    FOO_FLAG_CANDLE  =  0x0004,
    FOO_FLAG_LANTERN =  0x0008,
  } flags:16;                      /**< My flag thing */
}  foo_t;
typedef结构foo\t{
枚举标志_定义{
FOO_FLAG_BELL=0x0001,/**<铃铛的标志或其他标志*/
FOO_FLAG_BOOK=0x0002,
FOO_FLAG_CANDLE=0x0004,
FOO_FLAG_LANTERN=0x0008,
}旗帜:16;/**<我的旗帜*/
}富特;

+1:这在某些情况下可能有效。在其他情况下,我需要将名称定义为其他名称的组合,或将两个名称定义为相同的值,或将枚举值定义为帧头中的8位字段。到目前为止,最好的答案是…您可以使用相同值的枚举,没有任何限制。您可以通过与预处理器串联运算符##结合使用。您还可以重用一个值来定义另一个值:
enum{val1=1,val2=2,combined=val1 | val2,}应该可以工作。这是一个漂亮的结构,谢谢我一直在寻找这样的东西,使我们的新编码标准。