🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.std.c
Article #1654

ANSI assert

#1654
From: Joe Huffman
Date: Sat, 08 Sep 1990 05:57
51 lines
1794 bytes
In the latest version of 'The C User Journal' P.J. Plauger wrote about the
assert 'function' under ANSI C.  He outlined various 'sins' of many 
implementations of assert and 'blessed' the following version.  It appears
to me that this is wrong (it would break nearly all of my code).

----
/* assert.h standard header
 * copyright (c) 1990 by P.J. Plauger
 */
#undef assert/* remove any previous definition */
#ifdef NDEBUG

#define assert(test) ((void)0)

#else /* NDEBUG not defined */

void _Assert(char *);

#ifndef _STR /* define stringize macro just once */
#define _STR(x) #x
#endif

#define assert(test) ((test) || _Assert(__FILE__ ":" _STR(__LINE__) " " #test))
#endif
----

My concern is when NDEBUG is defined.  I have many places in my code where I
do something like the following:

  assert(i++ < limit);

  or

  assert(tree_init() == OKAY);

My definition of assert with debugging turned off looks like:

#define assert(test) ((void)(test))

Which allows the action inside the assert to occur.  Did the ANSI committee
overlook this?  Did P.J. Plauger?  Am I in error for doing this?  I realize
that macros can be hazardous (like #define SQR(x) ((x)*(x))) but this doesn't
have to be and yet either someone overlooked a potential problem or my coding
style is going to have to be revised (as well as 10's of thousands of lines
of code). 
 
Can anyone shed some light on this for me?

-- 
joe@proto.com
FAX: 208-263-8772
Technical Details
Message-ID: <1428@proto.COM>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!watserv1!watmath!att!occrsh!uokmax!munnari.oz.au!uunet!proto!joe

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!watserv1!watmath!att!occrsh!uokmax!munnari.oz.au!uunet!proto!joe
From: joe@proto.COM (Joe Huffman)
Newsgroups: comp.std.c
Subject: ANSI assert
Keywords: assert, NDEBUG
Message-ID: <1428@proto.COM>
Date: 8 Sep 90 05:57:57 GMT
Organization: Prototronics; Sandpoint, Idaho
Lines: 51