gpt4 book ai didi

c - doxygen 将宏类型错误渲染为公共(public)成员函数

转载 作者:行者123 更新时间:2023-12-01 14:28:30 26 4
gpt4 key购买 nike

我正在使用类型宏 list(type) 扩展为动态类型 [ list_of_type ],如下所示:

主要片段

...
#define list(type) force_append_macro(list_of_,type)
...
typedef struct _improperlydocumented
{
list(char_ptr) *words;
}improperlydocumented;
...

问题

doxygen is incorrectly rendering this type [ list(char_ptr) ] as a public member function ( instead of member data ).

环境信息

$ 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 -g

我的代码/配置:


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

氧气输出

improperlydocumented Struct Reference


#include <list.h>

Public Member Functions


list (char_ptr)*words

Detailed Description


This object is improperly documented.

Issue is that the list(char_ptr) is treated as a member function instead of a type..


问题

如何修复 doxygen 输出以将 words 记录为成员数据(不是公共(public)成员函数)?


配置尝试

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 上的工作场景(下面讨论):

empty documentation produced on windows

最佳答案

来自 Doxygen 文档

EXPAND_ONLY_PREDEF

If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then the macro expansion is limited to the macros specified with the PREDEFINED and EXPAND_AS_DEFINED tags.

The default value is: NO.

This tag requires that the tag ENABLE_PREPROCESSING is set to YES.

EXPAND_AS_DEFINED

If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this tag can be used to specify a list of macro names that should be expanded. The macro definition that is found in the sources will be used. Use the PREDEFINED tag if you want to use a different macro definition that overrules the definition found in the source code.

This tag requires that the tag ENABLE_PREPROCESSING is set to 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 =

其他选项保留默认值。

生成的输出是:

improperlydocumented Struct Reference


#include <list.h>

Public Member Functions


list_of_char_ptr* words

Detailed Description


This object is improperly documented.

Issue is that the list(char_ptr) is treated as a member function instead of a type..

关于c - doxygen 将宏类型错误渲染为公共(public)成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30556321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com