Difference between DEBUG and NDEBUG?

  • Thread starter Alexander Malkis
  • Start date
V

Victor Bazarov

Alexander Malkis said:
Why do programmers like to use NDEBUG instead of DEBUG?

That's a strange question. 'DEBUG' is usually for debugging. 'NDEBUG'
is defined when the debugging is done with. It means "NO DEBUG".

V
 
L

Leor Zolman

Why do programmers like to use NDEBUG instead of DEBUG?

It isn't that we /like/ to, it's because that's the symbol that the
preprocessor code in <assert.h> / <cassert> specifically looks for to
disable assertions.

Remember, don't shoot the messenger ;-)
-leor
 
A

Alf P. Steinbach

* "Victor Bazarov said:
That's a strange question. 'DEBUG' is usually for debugging. 'NDEBUG'
is defined when the debugging is done with. It means "NO DEBUG".

The standard assert macro is required to use NDEBUG. I don't think DEBUG
is mentioned anywhere in the standard. Too lazy to check, though... ;-)
 
V

Victor Bazarov

Alf P. Steinbach said:
The standard assert macro is required to use NDEBUG. I don't think DEBUG
is mentioned anywhere in the standard. Too lazy to check, though... ;-)

No, it's not defined anywhere. Many do still use it (or some variations
of it), I believe. "Everything is allowed if not expressly prohibited".
 
E

E. Robert Tisdale

Alexander said:
Why do programmers like to use NDEBUG instead of DEBUG?

ASSERT(3) Linux Programmer’s Manual ASSERT(3)

NAME
assert - abort the program if assertion is false

SYNOPSIS
#include <assert.h>

void assert(scalar expression);

DESCRIPTION
If the macro NDEBUG was defined at the moment <assert.h> was last
included, the macro assert() generates no code, and hence does
nothing at all. Otherwise, the macro assert() prints an error
message to standard output and terminates the program by calling
abort() if expression is false (i.e., compares equal to zero).

The purpose of this macro is to help the programmer find bugs in
his program. The message "assertion failed in file foo.c,
function do_bar(), line 1287" is of no help at all to a user.


The assert debugging mechanism was designed to be *on* by default.
You must define NDEBUG to turn it off.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,045
Latest member
DRCM

Latest Threads

Top