相关疑难解决方法(0)

C预处理器是否首先删除注释或扩展宏?

考虑这个(可怕的,可怕的,没有好的,非常糟糕的)代码结构:

#define foo(x) // commented out debugging code

// Misformatted to not obscure the point
if (a)
foo(a);
bar(a);
Run Code Online (Sandbox Code Playgroud)

我已经看到两个编译器的预处理器在这段代码上生成不同的结果:

if (a)
bar(a);
Run Code Online (Sandbox Code Playgroud)

if (a)
;
bar(a);
Run Code Online (Sandbox Code Playgroud)

显然,对于可移植的代码库来说这是一件坏事.

我的问题:预处理器应该用这个做什么?首先是Elide评论,还是先扩展宏?

c comments c99 c-preprocessor

54
推荐指数
3
解决办法
2万
查看次数

在doxygen注释中展开宏以打印出软件版本

我有一些C++代码库,用doxygen记录,并使用GNU make构建.版本信息集中在makefile中,我有类似的东西:

VERSION = 1.2.3.4

在我的makefile中,CFLAGS添加以下定义:

CFLAGS + = -DAPP_VERSION = $(版本)

这使我能够在代码中获取版本,如下所示:

#define STR_EXPAND(tok) #tok
#define STR(tok) STR_EXPAND(tok)
int main()
{
    cout << "software version is << STR(APP_VERSION) << endl;
}
Run Code Online (Sandbox Code Playgroud)

现在,我想要的是在doxygen生成的html文件中有这个:

当前版本的软件是1.2.3.4

我设法将makefile变量导出到doxygen配置文件中:( 编辑:从makefile调用doxygen,通过'make-doc'目标)

PREDEFINED = APP_VERSION = $(版本)

但是,如果我尝试使用doxygen\mainpage这样的命令,它会失败,因为(当然),宏名称不会在评论中扩展...

/**
\mainpage this is the doc
Current version is $(APP_VERSION) -- or -- ... is APP_VERSION
*/
Run Code Online (Sandbox Code Playgroud)

问题

  • 你知道在doxygen评论中"扩展"这个宏的方法吗?这可以通过对makefile中保存注释的文件进行一些sed处理来完成,但是这可以直接用doxygen解决吗?

  • 其他项目如何处理版本控制(除了VCS提供的自动版本控制工具,我的意思),以版本ID在文件中唯一定义的方式,因此它可以由软件构建系统和文档构建系统获取.

相关:如何显示定义的值

c++ doxygen makefile

7
推荐指数
1
解决办法
2489
查看次数

标签 统计

c ×1

c++ ×1

c-preprocessor ×1

c99 ×1

comments ×1

doxygen ×1

makefile ×1