The header <assert.h> defines the assert
macro and refers to another macro, NDEBUG , defined
elsewhere. If NDEBUG is defined as a macro name at the
point in the source file where <assert.h> is included,
the assert macro is defined as follows:
#define assert(ignore) ((void) 0)
void assert(int expression);
assert macro writes information
   about the particular call that failed on the standard error
   file in an implementation-defined format. It then calls the
   abort function. The assert macro
   returns no value.