2014-11-02 61 views
2

在我正在编写的一个项目中,使用C89编写的一个项目中,我使用了assert()语句作为代码在开发机器上出现故障时的一种方式,当有一些预定义的假设不要成立。但是,代码还包含一些错误处理代码,以便程序不会在生产环境中的断言失败时崩溃。C:从生产代码中删除断言

该项目使用GNU Autotools来编译和分发源代码发布。

现在,我的问题是如何确保运行make dist将删除我的代码中的所有断言,然后生成分发tarball?

+2

可以使用编译标志'-DNDEBUG = 1'来定义'NDEBUG' – P0W 2014-11-02 06:13:21

回答

5

assert.h维基百科上:

程序员可以仅通过重新编译 程序,在不改变的源代码消除断言:如果宏NDEBUG是加入了<assert.h>之前定义 ,断言()宏 简单地定义为:

#define assert(ignore)((void) 0)

+0

这是核心信息,但是需要一些额外的信息 - 如何确保'make dist'的编译定义了'NDEBUG',以及如何确保所有的代码都是在没有启用断言的情况下重建的,等等。 – 2014-11-02 06:09:03

+1

我原以为“如何从GNU Autotools编辑makefile”是另一个话题。如何将编译器标志添加到GNU Autotools – Eric 2014-11-02 06:12:02