【发布时间】:2015-08-13 21:34:05
【问题描述】:
我正在使用类型宏 list(type),它扩展为动态类型 [list_of_type],如下所示:
主sn-p
...
#define list(type) force_append_macro(list_of_,type)
...
typedef struct _improperlydocumented
{
list(char_ptr) *words;
}improperlydocumented;
...
问题
doxygen 错误地将这种类型 [
list(char_ptr)] 渲染为 公共成员函数(而不是成员数据)。
环境信息
$ 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
doxygen 向导生成以下输出:
我的代码/配置:
doxygen.config
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 =
注意:我尝试设置EXPAND_AS_DEFINED = list;与下面的输出相同..
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
氧气输出
未正确记录的结构参考
#include
公共成员函数
list (char_ptr)*words详细说明
此对象的文档记录不正确。
问题是 list(char_ptr) 被视为成员函数 而不是类型..
问题
如何将 doxygen 输出修复为文档 words 作为成员数据(不是公共成员函数)?
配置尝试
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
** 在所有其他设置相同的情况下尝试了 YES 和 NO(不包括星号;)
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 =
仍然没有正确扩展列表(char_ptr)。输出没有变化
我试图通过复制+粘贴上面的配置和 list.h 文件来复制 Windows 上的工作场景(下面讨论):
【问题讨论】:
-
你有
EXPAND_ONLY_PREDEF = YES,它不会扩展list。您可以尝试将其设置为否。或者你可以试试PREDEFINED += list(x)=list_type_##x。这两个都没试过。 -
尝试 EXPAND_ONLY_PREDEF = NO,并明确将宏定义添加到 PREDEFINED,均未解决问题
-
请注意,关于 EXPAND_AS_DEFINED 的bug 已在 v1.8.6 中得到更正,此外,v1.7.4 已修复一些宏扩展的错误。
-
您的问题似乎没有被其他用户复制。为了帮助您更多,您能否与所有选项共享完整的配置文件(通过从 doxywizard 中保存)?通过互联网剪贴板或您想要的共享它(但不是在 OP 中,它很长......)。
-
@Bentoy13 我添加了一个指向我从
doxygen -g得到的输出的链接