0

(已解决,请参阅最后的解决方案)

我在一个嵌入式 C 项目中,并编写了一个仅包含静态强制内联函数的 .h 文件。我已经这样记录了它们:

//----------------------------------------------------------------------------
// RECT WIDTH
/** Returns a source rectangle's width.
 *  The RECT_Width method calculates and returns a source rectangle's width.
 * 
 * @param r  A RECT structure that contains the specified source rectangle.
 * @return   The source rectangle's width.
 */
FORCE_INLINE __attribute__((unused))
static COORD RECT_Width(RECT r) {
    return r.Right-r.Left;
}

FORCE_INLINE定义为

#define FORCE_INLINE  __attribute__((always_inline))

问题线将扩展为:

__attribute__((always_inline)) __attribute__((unused))

__attribute__已添加到该EXCLUDE_SYSMBOLS部分,因此它们不会被记录为函数。

问题是 Doxygen 似乎被这条线弄糊涂了FORCE_INLINE __attribute__((unused))。似乎它不同步并跳过了文件中间除了一个之外的几乎所有功能。该函数的格式与其他所有人完全相同。

Doxygen 还将某些函数的部分参数和代码片段记录为全局变量。

FORCE_INLINE RECT   r2
r   Left = MAX(r1.Left,r2.Left)
r   Top = MAX(r1.Top,r2.Top)
r   Right = MIN(r1.Right,r2.Right)
r   Bottom = MIN(r1.Bottom,r2.Bottom)
return  r
FORCE_INLINE POINT  p
FORCE_INLINE COORD  offset
FORCE_INLINE POINT  pos

我也尝试打开MACRO_EXPANSIONEXPAND_ONLY_PREDEF并添加FORCE_INLINE到该EXPAND_AS_DEFINED部分。没有不同。

我也尝试将它们添加到EXCLUDE_SYSMBOLS

FORCE_INLINE
__attribute__

作为测试,我将@fn命令添加到 Doxygen 看不到的功能之一,并生成了该功能的所有文档。但是我不能添加@fn到每个函数中,也不能将代码片段记录为全局变量。

有谁知道如何让 Doxygen 忽略FORCE_INLINE __attribute__((unused))每个函数前面的?

解决方案
@KamilCuk 给了我一个想法,所以我将它添加到我的头文件中:

#if __DOXYGEN__
    #define FORCE_INLINE_SILENT
#else
    #define FORCE_INLINE_SILENT FORCE_INLINE __attribute__((unused))
#endif

然后替换FORCE_INLINE __attribute__((unused))FORCE_INLINE_SILENT. FORCE_INLINE在另一个头文件中定义。

4

1 回答 1

2

问题是 Doxygen 似乎对 FORCE_INLINE属性((未使用))这一行感到困惑

你应该处理它,以免混淆。例如:

#if __GNUC__
#define FORCE_INLINE  __attribute__((always_inline))
#else
// expands to nothing for others
#define FORCE_INLINE
#endif

或喜欢:

#if __DOXYGEN__
#define FORCE_INLINE
#endif

这样,doxygen 就什么也看不见了。您还需要以__attribute__((unused))这种方式处理,并且通常将此类宏放在一个公共头文件中,以使您的项目与不同的编译器兼容。

于 2021-07-01T13:26:02.163 回答