Proper Use of Assert and Enforce

Minas Mina via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Feb 5 00:45:00 PST 2016


On Wednesday, 14 March 2012 at 05:44:24 UTC, Chris Pons wrote:
> I'm new, and trying to incorporate assert and enforce into my 
> program properly.
>
> My question revolves around, the fact that assert is only 
> evaluated when using the debug switch. I read that assert 
> throws a more serious exception than enforce does, is this 
> correct?
>
> I'm trying to use enforce in conjunction with several functions 
> that initialize major components of the framework i'm using.
>
> However, i'm concerned with the fact that my program might 
> continue running, while I personally would like for it to 
> crash, if the expressions i'm trying to check fail.
>
> Here is what i'm working on:
>
> 	void InitSDL()
> 	{
> 		enforce( SDL_Init( SDL_Init_Everything ) > 0, "SDL_Init 
> Failed!");
>
> 		SDL_WN_SetCaption("Test", null);
>
> 		backGround = SDL_SetVideoMode( xResolution, yResolution, 
> bitsPerPixel, SDL_HWSURFACE | SDL_DOUBLEBUF);
>
> 		enforce( backGround != null, "backGround is null!");
>
> 		enforce( TTF_Init() != -1, "TTF_Init failed!" );
> 	}
>
> Is it proper to use in this manner? I understand that I 
> shouldn't put anything important in an assert statement, but is 
> this ok?

Use assertions when a variable's value should not depend on 
external factors.
For example, let's say you want to write a square root function.
The input must be >= 0, and because this depends on external 
factors (e.g. user input), you must check it with `enforce()`.
The output of the function must should always be >= 0 as well, 
but this does not depend on any external factor, so use assert 
for it (a negative square root is a program bug).

auto sqrt(float val)
{
     enfore(val >= 0f);

     float result = ...
     assert(result >= 0f);
     return result;
}


More information about the Digitalmars-d-learn mailing list