c - 将 pragma 扩展为注释(对于 doxygen)

标签 c c-preprocessor doxygen

注释通常在预处理器运行之前转换为单个空白。但是,有一个引人注目的用例。

#pragma once   

#ifdef DOXYGEN
  #define DALT(t,f) t
#else
  #define DALT(t,f) f
#endif

#define MAP(n,a,d) \
  DALT ( COMMENT(| n | a | d |) \
       , void* mm_##n = a \
       )

/// Memory map table
/// | name | address | description |
/// |------|---------|-------------|
MAP (reg0  , 0       , foo         )
MAP (reg1  , 8       , bar         )

在此示例中,当设置了 DOXYGEN 标志时,我想从宏中生成 doxygen 标记。如果不是,我想生成变量。在这种情况下,所需的行为是在宏中生成注释。有什么想法吗?

我试过 /##/ 和另一个更间接的例子

#define COMMENT SLASH(/)
#define SLASH(s) /##s

都没有用。

最佳答案

在 doxygen 中,可以在将源输入到 doxygen 内核之前在源上运行命令。在 Doxyfile 中有一些 FILTER 可能性。在这种情况下:INPUT_FILTER 该行应为:

INPUT_FILTER = "sed -e 's%^ *MAP *(\([^,]*\),\([^,]*\),\([^)]*\)) %///|\1 |\2 |\3 |%'"

此外,整个 #if 结构可以消失,一个可能只需要:

#define MAP(n,a,d) void* mm_##n = a

关于c - 将 pragma 扩展为注释(对于 doxygen),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52538489/

相关文章:

c - 测试多个数组元素

c - 以下程序的输出

c - 在 C/C++ 中 : How can i implement a 2D int array using two single pointers (no use of **int)?

c - 通过宏将变量声明为内联函数

namespaces - 在 doxygen 生成的文档中隐藏外部命名空间

doxygen - 我可以编写类似于 @code 或 @verbatim 的 doxygen 别名吗?

c - 了解用户何时按下向上/向下箭头

iOS静态库+预处理头文件

c++ - 将名称(即宏)定义为空

c - QtCreator Doxygen for c 项目