By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,851 Members | 2,097 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,851 IT Pros & Developers. It's quick & easy.

assert()

P: n/a
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...
Jul 22 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
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).
Jul 22 '05 #2

P: n/a
"Dave" <be***********@yahoo.com> wrote in message news:<vr************@news.supernews.com>...
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
Jul 22 '05 #3

P: n/a
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
Jul 22 '05 #4

P: n/a
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.

Jul 22 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.