how to completely disable assertion

2019-01-06 12:54发布

I have my code full of call to assert(condition). In the debug version I use g++ -g exploiting my assertion. With my surprise I can see assertion working also in my release version, the one compiled without -g option.

How can I completely disable at compile time my assertion? Should I explicitly define NDEBUG in any build I produce despite they are debug,release or whatever any other?

标签: c++ c assert
5条回答
Evening l夕情丶
2楼-- · 2019-01-06 13:09

The -g flag doesn't affect the operation of assert, it just ensures that various debugging symbols are available.

Setting NDEBUG is the standard (as in official, ISO standard) way of disabling assertions.

查看更多
Evening l夕情丶
3楼-- · 2019-01-06 13:13

You can either disable assertions completely by

#define NDEBUG
#include <assert.h>

or you can set NDEBUG (via -DNDEBUG) in your makefile/build procedure depending on whether you want a productive or dev version.

查看更多
看我几分像从前
4楼-- · 2019-01-06 13:27

Use #define NDEBUG

7.2 Diagnostics

1 The header defines the assert macro and refers to another macro,

NDEBUG

which is not defined by <assert.h>. If NDEBUG is defined as a macro name at the point in the source file where is included, the assert macro is defined simply as

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

The assert macro is redefined according to the current state of NDEBUG each time that <assert.h> is included.

查看更多
来,给爷笑一个
5楼-- · 2019-01-06 13:32

You must #define NDEBUG (or use the flag -DNDEBUG with g++) this will disable assert as long as it's defined before the inclusion of the assert header file.

查看更多
姐就是有狂的资本
6楼-- · 2019-01-06 13:32

Yes, define NDEBUG on the command line/build system with the preprocessor/compiler option -DNDEBUG.

This has nothing to do with the debugging info inserted by -g.

查看更多
登录 后发表回答