| | Design by Contract (long post)
|
|
Hi, people. The reason for the flood of posts is that I've been trying to get authenticated on LUGNET for the last week :( But as you can see, I'm authenticated now :) On to the topic of this post (sorry for such a long post): I have created an (...) (21 years ago, 8-Jan-04, to lugnet.robotics.rcx, FTX)
|
|
| | Re: Design by Contract (long post)
|
|
(...) Hi Iain! (...) Cool! (...) I have a question about this: If NDEBUG is defined, shouldn't it still execute x? That is, shouldn't the code in assert.h (or wherever) be: #ifdef NDEBUG #define assert(x) (x) #else #define assert(x) if (x) else (...) (21 years ago, 8-Jan-04, to lugnet.robotics.rcx, FTX)
|
|
| | Re: Design by Contract (long post)
|
|
(...) <delurk> The first definition of assert is the correct, standard definition. However there is a slight boo boo in the original post in the line: assert (myptr = malloc (sizeof (mystruct)); Which will delete the malloc when NDEBUG is defined. (...) (21 years ago, 8-Jan-04, to lugnet.robotics.rcx, FTX)
|
|
| | Re: Design by Contract (long post)
|
|
(...) D'oH! Thanks, Tim. I was very careful composing the original post, but added the example in as an after thought - Well spotted. Iain. (21 years ago, 8-Jan-04, to lugnet.robotics.rcx, FTX)
|
|
| | Re: Design by Contract (long post)
|
|
(...) I agree it seems to be the wrong way round. That's the standard implementation. NDEBUG seems to stand for "No debug". One advantage of making it negative, is that you get the assert()s if you don't do anything (ie dont define NDEBUG). BTW, (...) (21 years ago, 8-Jan-04, to lugnet.robotics.rcx, FTX)
|
|
| | Re: Design by Contract (long post)
|
|
(...) For more fun with asserts: See if your compiler supports the FILE and LINE macros (or something equivilant). #ifdef NDEBUG #define assert(x) ((void)0) #else #define assert(x) if (x) else assertfail(FILE,LINE); #endif your assert_fail function (...) (21 years ago, 9-Jan-04, to lugnet.robotics.rcx, FTX)
|
|
| | Re: Design by Contract (long post)
|
|
Thanks, Tim. I haven't used the #x idiom myself - I like it. Your implementation with the boolean: (...) Will need an extra level of parenthesis surrounding the bool so that its declaration scope is made local. You can certainly go to town with this (...) (21 years ago, 10-Jan-04, to lugnet.robotics.rcx, FTX)
|