注释通常在预处理器运行之前转换为单个空白。但是,有一个引人注目的用例。
#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/