How can I completely disable calls to assert()?
My code is full of calls to assert(condition)
.
In the debug version I use g++ -g
which triggers my assertions.
Unexpectedly, the same assertions are also triggered in my release version, the one compiled without -g
option.
How can I completely disable my assertions at compile time? Should I explicitly define NDEBUG
in any build I produce regard开发者_如何学编程less of whether they are debug, release or anything else?
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.
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.
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.
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.
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
.
精彩评论