in/out with -release
Jonathan M Davis
jmdavisProg at gmx.com
Fri Mar 4 20:22:44 PST 2011
On Friday 04 March 2011 20:14:32 Kai Meyer wrote:
> I have an 'enforce' function call in an 'in' block for a function. When I
> compile with "-release -O -inline", the in/out blocks appear to be skipped.
> It's a simple verification for a dynamic array to not have a length of 0.
> In debug mode, the test condition hits the enforce in the 'in' block, but
> in release mode it does not. In both release and debug mode, the same
> exact enforce function works properly.
>
> So am I to understand that -release will skip in/out blocks entirely?
Of course. It uses asserts. asserts are disabled in -release. Asserts are for
debugging, testing, and verifying code when developing, not for code which is
released. So, you get the benefit of the test when you don't have -release and
the benefit of speed when you do have -release. If an assertion fails, your code
logic is invalid. It's for validating your code, not user input or whatnot.
enforce, on the other hand, is not a language primitive. It's not intended for
testing or debugging. It's intended to be used in production code to throw an
exception when its condition fails. If an enforce fails, that generally means
that you had bad input somewhere or that an operation failed or whatnot. It's
not intended for testing the logic of your code like assert is intended to do.
It's simply a shorthand way to throw an exception when your program runs into a
problem.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list