Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > assert()

Reply
Thread Tools

assert()

 
 
Dave
Guest
Posts: n/a
 
      11-19-2003
In a nutshell, what is the behavior of the assert() macro ***as proscribed
by the C89 Standard*** (which I don't have)? Of course, it doens't appear
in the C++ Standard since it's inherited from C. Hence my inquiry about the
C Standard even though I care about this from a C++ perspective...

Specifically, I'm wondering what the Standard has to say about when the
compiler ignores asserts and when the compiler is to compile them in and
generate code for them. After all, the Standard says nothing debug vs.
release builds...


 
Reply With Quote
 
 
 
 
Simon Saunders
Guest
Posts: n/a
 
      11-19-2003
On Wed, 19 Nov 2003 12:50:40 -0700, Dave wrote:

> In a nutshell, what is the behavior of the assert() macro ***as
> proscribed by the C89 Standard*** (which I don't have)? Of course, it
> doens't appear in the C++ Standard since it's inherited from C. Hence
> my inquiry about the C Standard even though I care about this from a C++
> perspective...
>
> Specifically, I'm wondering what the Standard has to say about when the
> compiler ignores asserts and when the compiler is to compile them in and
> generate code for them. After all, the Standard says nothing debug vs.
> release builds...


assert is defined as ((void)0) if the macro NDEBUG is defined at the point
where <assert.h> is included. If NDEBUG is not defined, assert is supposed
to print an error message to stderr and call abort(). The format of the
error message is implementation-defined, but it must include the source
file name and line number (and function name in C99).
 
Reply With Quote
 
 
 
 
Gavin Deane
Guest
Posts: n/a
 
      11-20-2003
"Dave" <(E-Mail Removed)> wrote in message news:<(E-Mail Removed)>...
> In a nutshell, what is the behavior of the assert() macro ***as proscribed
> by the C89 Standard*** (which I don't have)? Of course, it doens't appear
> in the C++ Standard since it's inherited from C. Hence my inquiry about the
> C Standard even though I care about this from a C++ perspective...
>
> Specifically, I'm wondering what the Standard has to say about when the
> compiler ignores asserts and when the compiler is to compile them in and
> generate code for them. After all, the Standard says nothing debug vs.
> release builds...


I don't have the C standard either, but in the C++ standard,
17.4.2.1/2 mentions the NDEBUG macro. And my understanding is that
when this macro is not defined, code is generated for an assert, and
when NDEBUG is defined code is not generated.

This ties in with the contents of my implementation's assert.h file.

GJD
 
Reply With Quote
 
EventHelix.com
Guest
Posts: n/a
 
      11-20-2003
Checkout the following article for assert handling:

http://www.eventhelix.com/RealtimeMa...y_contract.htm

Sandeep
--
http://www.EventHelix.com/EventStudio
EventStudio 2.0 - Generate Sequence Diagrams and Use Case Diagrams in PDF
 
Reply With Quote
 
NFish
Guest
Posts: n/a
 
      11-20-2003
EventHelix.com wrote:

> Checkout the following article for assert handling:
>
> http://www.eventhelix.com/RealtimeMa...y_contract.htm
>
> Sandeep


Their non-debugging macros do not *not* evaluate their arguments; e.g.

ASSERT(strlen(foo) > 10);

gets expanded to

strlen(foo) > 10;

when the _DEBUG flag is not defined. Their code is full of similar
examples where assert macros generate overhead no matter what. Pretty
poor example.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments