doxygen misrendering宏类型作为公共成员函数

时间:2015-05-31 10:23:58

标签: c macros doxygen

我正在使用类型宏m := MyMy{[]interface{}{int64(1234), "strval", 32.2}} key, err := datastore.Put(c, datastore.NewIncompleteKey(c, "MyMy", nil), &m) ,它会扩展为动态类型[list(type)],如下所示:

主要摘要

list_of_type

问题

  

doxygen错误地将此类型[... #define list(type) force_append_macro(list_of_,type) ... typedef struct _improperlydocumented { list(char_ptr) *words; }improperlydocumented; ... ]呈现为   公共成员函数(而不是成员数据)。

环境信息

list(char_ptr)

doxygen向导生成以下输出:

doxygen -g

我的代码/配置:

doxygen.config

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.1 LTS
Release:    14.04
Codename:   trusty

$ doxygen --version
1.8.6

注意:我尝试设置PROJECT_NAME = "doxytest" OUTPUT_DIRECTORY = ./build/docs OPTIMIZE_OUTPUT_FOR_C = YES TYPEDEF_HIDES_STRUCT = YES HIDE_SCOPE_NAMES = YES SHOW_NAMESPACES = NO INPUT = ./ FILE_PATTERNS = *.h *.c GENERATE_HTML = YES GENERATE_LATEX = NO ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = YES SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = EXPAND_AS_DEFINED = ;输出与以下相同..

list.h

EXPAND_AS_DEFINED = list

doxygen输出

  

不正确地记录结构参考


     

#include< list.h>

     

公共成员职能


#ifndef __list__
#define __list__

typedef struct 
{
  int capacity,
      count,
      objsize,
      xprate;
  void *data;
}glist_t;

/* allow list types to be defined (as wrappers around generic_list) */
#define append_macro(a,b) a ## b
#define force_append_macro(a,b) append_macro(a,b)
#define declare_named_list_type(name,type) typedef union\
                                           {struct force_append_macro(_template_,name)\
                                             {\
                                               int capacity,\
                                               count,\
                                               objsize,\
                                               xprate;\
                                               type *data;\
                                             }template;\
                                             glist_t ls;\
                                           }name
#define declare_list_type(type) declare_named_list_type(force_append_macro(list_of_,type),type)
#define list(type) force_append_macro(list_of_,type)

typedef char * char_ptr;
declare_list_type(char_ptr);

/*!
 * This object is improperly documented.
 *
 * Issue is that the list(char_ptr) is treated as a member function instead of a type..
 */

typedef struct _improperlydocumented
{
  list(char_ptr) *words;
}improperlydocumented;

#endif
     

详细说明


     

此对象记录不正确。

     

问题是列表(char_ptr)被视为成员函数   而不是类型..

问题

如何将doxygen输出修复为文档list (char_ptr)*words 作为成员数据(不是公共成员函数)?

<小时/> 配置尝试次数

words

**尝试了YES和NO,所有其他设置都相同(不包括星号;)

PROJECT_NAME           = "doxytest"
OUTPUT_DIRECTORY       = ./build/docs
OPTIMIZE_OUTPUT_FOR_C  = YES

TYPEDEF_HIDES_STRUCT   = YES

HIDE_SCOPE_NAMES       = YES
SHOW_NAMESPACES        = NO
INPUT                  = ./
FILE_PATTERNS          = *.h *.c

GENERATE_HTML          = YES
GENERATE_LATEX         = NO

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = YES|NO **
SEARCH_INCLUDES        = YES
INCLUDE_PATH           = 
INCLUDE_FILE_PATTERNS  = 
PREDEFINED             =
EXPAND_AS_DEFINED      = list

仍然没有正确扩展列表(char_ptr)。没有产出变化

我试图通过复制+粘贴config和list.h文件来复制Windows上的工作场景(下面讨论):

empty documentation produced on windows

1 个答案:

答案 0 :(得分:0)

来自Doxygen文档

  

EXPAND_ONLY_PREDEF

     

如果EXPAND_ONLY_PREDEF和MACRO_EXPANSION标记都设置为YES,则宏扩展仅限于指定的宏   PREDEFINED和EXPAND_AS_DEFINED标签。

     

默认值为:NO。

     

此标记要求将标记ENABLE_PREPROCESSING设置为YES。

     

EXPAND_AS_DEFINED

     

如果MACRO_EXPANSION和EXPAND_ONLY_PREDEF标记设置为YES,则此标记可用于指定应该应该包含的宏名称列表   扩大。在源中找到的宏定义将是   用过的。如果要使用其他宏,请使用PREDEFINED标记   定义否决了源代码中的定义。

     

此标记要求将标记ENABLE_PREPROCESSING设置为YES。

因此,EXPAND_AS_DEFINED选项仅在MACRO_EXPANSION选项指定为yes(不是)时才有效。

因此,只需将MACRO_EXPANSION指定为yes,然后将list添加到EXPAND_AS_DEFINED。这将解决您的问题。

修改

使用Doxygen 1.8.5,1.8.6和1.8.9.1(在Win7下)测试了以下配置(仅相关选项):

PROJECT_NAME           = "doxytest"
OUTPUT_DIRECTORY       = ./
OPTIMIZE_OUTPUT_FOR_C  = YES

TYPEDEF_HIDES_STRUCT   = YES

HIDE_SCOPE_NAMES       = YES
SHOW_NAMESPACES        = NO
INPUT                  = ./
FILE_PATTERNS          = *.h *.c

GENERATE_HTML          = YES
GENERATE_LATEX         = NO

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = NO
SEARCH_INCLUDES        = YES
INCLUDE_PATH           = 
INCLUDE_FILE_PATTERNS  = 
PREDEFINED             =

其他选项保留为默认值。

生成的输出为:

  

不正确地记录结构参考


#include <list.h>
     

公共成员职能


list_of_char_ptr* words
     

详细说明


     

此对象记录不正确。

     

问题是列表(char_ptr)被视为成员函数   而不是类型..