首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于C模板仿真的DO2

用于C模板仿真的DO2
EN

Stack Overflow用户
提问于 2017-02-23 03:13:24
回答 1查看 944关注 0票数 5

我试图用for为C中的模拟模板生成文档,但没有成功。我希望有人知道如何使宏欺骗在doxygen预处理程序中工作?我已经尝试过启用"MACRO_EXPANSION“而没有运气。

编辑:这个问题的最易变性的形式是:“我如何使DO2处理预处理器指令#包括与C预处理器类似的方式?”

我在文件夹"test“中有以下代码(一个非常精心设计的示例):

templates.h

代码语言:javascript
复制
#ifndef TEMPLATES_H_
#define TEMPLATES_H_

#define CAT(X,Y) X##_##Y
#define TEMPLATE(X,Y) CAT(X,Y)

#endif // TEMPLATES_H_

test.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#ifdef TEST_T

#include "templates.h"

TEST_T TEMPLATE(sum,TEST_T)(TEST_T a, TEST_T b);

#endif // ifdef TEST_T

test.c

代码语言:javascript
复制
#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_T

test_template.c

代码语言:javascript
复制
#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

代码语言:javascript
复制
# 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中,我也会很高兴):

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42406308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档