我试图用for为C中的模拟模板生成文档,但没有成功。我希望有人知道如何使宏欺骗在doxygen预处理程序中工作?我已经尝试过启用"MACRO_EXPANSION“而没有运气。
编辑:这个问题的最易变性的形式是:“我如何使DO2处理预处理器指令#包括与C预处理器类似的方式?”
我在文件夹"test“中有以下代码(一个非常精心设计的示例):
templates.h
#ifndef TEMPLATES_H_
#define TEMPLATES_H_
#define CAT(X,Y) X##_##Y
#define TEMPLATE(X,Y) CAT(X,Y)
#endif // TEMPLATES_H_test.h
#ifndef TEST_H_
#define TEST_H_
#include "templates.h"
#ifdef TEST_T
#error "TEST_T cannot be defined prior to this compilation step"
#endif
#define TEST_T uint8_t
#include "test_template.h"
#undef TEST_T
#define TEST_T uint16_t
#include "test_template.h"
#undef TEST_T
#endif // TEST_H_test_template.h
#ifdef TEST_T
#include "templates.h"
TEST_T TEMPLATE(sum,TEST_T)(TEST_T a, TEST_T b);
#endif // ifdef TEST_Ttest.c
#include "test.h"
#ifdef TEST_T
#error "TEST_T cannot be defined prior to this compilation step"
#endif
#define TEST_T uint8_t
#include "test_template.c"
#undef TEST_T
#define TEST_T uint16_t
#include "test_template.c"
#undef TEST_Ttest_template.c
#ifdef TEST_T
TEST_T TEMPLATE(sum,TEST_T)(TEST_T a, TEST_T b)
{
return a + b;
}
#endif // ifdef TEST_T在我的doxygen配置文件中:
test.cfg
# Doxyfile 1.8.13
PROJECT_NAME = "Test"
OUTPUT_DIRECTORY = "docs_test"
TAB_SIZE = 3
OPTIMIZE_OUTPUT_FOR_C = YES
INPUT = "../test"
RECURSIVE = YES
MACRO_EXPANSION = YES
# Temporary to extract all without tags
EXTRACT_ALL = YES然而,sum*函数的模板版本在doxygen (.h或.c文档)中不存在;例如,test.h如下所示(不过如果它出现在test_template.h中,我也会很高兴):

有什么想法吗?
发布于 2017-02-28 07:54:25
来自doxygen文档:http://www.doxygen.nl/manual/preprocessing.html
如果您不确定doxygen预处理的效果如何,您可以按以下方式运行doxygen: doxygen -d预处理器 这将指示doxygen在完成预处理后将输入源转储到标准输出(提示:在配置文件中设置file = YES和WARNINGS = NO以禁用任何其他输出)。
将其与从真正的c预处理器生成的输出进行比较,以确保doxygen展开的内容与C编译器所看到的相匹配。
您可能需要在doxygen中调整与预处理相关的配置变量来完成此工作。
尽管如此,正如其他人所评论的那样,我不会亲自使用C预处理器,但我同意这是个人意见。
一个可能出现的问题是:C预处理器可以在扩展宏的同时生成代码,但是它不会生成注释,所有doxygen标记都嵌入在C注释中。
当然,doxygen可能会发现有一个名为sum_uint8_t的函数,但是要真正添加关于这个函数的文档,源代码需要在源代码中显式地添加“结构命令”。
请参阅http://www.doxygen.nl/manua/docblocks.html#structuralcommands
https://stackoverflow.com/questions/42406308
复制相似问题