Click here to Skip to main content
15,883,793 members
Articles / Programming Languages / C++
Tip/Trick

Verify

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
2 Jul 2013BSD2 min read 19.2K   130   5   8
A Practical Alternative to Assert in C++

Background

I confess that in the past, I have abused assert(). I used it for handling nearly all of my errors, and rarely used return values or anything else. When I started taking computer science classes, I was introduced to try, catch, and exceptions, and using them I was able to write more productive and useful code.

However, there is one thing that I believe assert is superior at: aesthetics. When writing code, I much prefer the brevity of the assert macro. It's simpler, takes up less space, and is overall much more pleasing to look at than if statements and throws.

Verify was my solution. A macro which has the brevity of assert, but uses the much more practical Exceptions.

Using the Code

Verify is a two parameter macro. The first parameter is the condition to test, the second is the Exception that will be thrown if the condition is false.

C++
#include "verify.h"

void func1(void* ptr)
{
    verify(ptr != NULL, -1);
}

Verify has three modes:

Standard

The simplest mode, if the condition is false, it throws the Exception. The End.

Debug

Debug mode carries over some features I found useful in the assert macro. If the condition is true, then nothing happens, but if it is false, it prints out the following debug information to the screen:

  • The condition passed to the macro.
  • The exception that was thrown.
  • File name
  • Function name
  • Line number

Then it throws the Exception.

No Verify

The equivalent of NDEBUG for assert. If NVERIFY is defined ahead of the verify header, then verify() has no effect.

Conclusion

And that's pretty much it. Short, sweet, and to the point. If you can think of any improvements or find any problems, please let me know in the comments.

I'd like to thank Charles Nicholson for his article Adventures in Assert, which was a great help in solving several bugs I had in my original code.

License

This article, along with any associated source code and files, is licensed under The BSD License


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionI am confused Pin
geoyar1-Jul-13 5:58
professionalgeoyar1-Jul-13 5:58 
GeneralYou don't seem to understand the concept behind assert and verify Pin
pasztorpisti28-Jun-13 8:58
pasztorpisti28-Jun-13 8:58 
GeneralRe: You don't seem to understand the concept behind assert and verify Pin
Jacob F. W.28-Jun-13 11:22
Jacob F. W.28-Jun-13 11:22 
GeneralRe: You don't seem to understand the concept behind assert and verify Pin
pasztorpisti28-Jun-13 12:26
pasztorpisti28-Jun-13 12:26 
GeneralRe: You don't seem to understand the concept behind assert and verify Pin
Jacob F. W.28-Jun-13 17:23
Jacob F. W.28-Jun-13 17:23 
GeneralRe: You don't seem to understand the concept behind assert and verify Pin
pasztorpisti29-Jun-13 7:02
pasztorpisti29-Jun-13 7:02 
QuestionNot enough... Pin
Mehdi Gholam27-Jun-13 20:18
Mehdi Gholam27-Jun-13 20:18 
AnswerRe: Not enough... Pin
Jacob F. W.27-Jun-13 20:21
Jacob F. W.27-Jun-13 20:21 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.