Is assert(false) ignored in release mode (VC++)?
IIRC, assert(x) is a macro that evaluates to nothing when NDEBUG is defined, which is the standard for Release builds in Visual Studio.
Only if NDEBUG is defined I think (which it will be by default for Visual C++ apps).
The assert macro (at least it is typically a macro) is usually defined to no-op in release code. It will only trigger in debug code. Having said that. I have worked at places which defined their own assert macro, and it triggered in both debug and release mode.
I was taught to use asserts for condition which can "never" be false, such as the pre-conditions for a function.
If compiling in release mode includes defining NDEBUG, then yes.
See assert (CRT)
I think it is a mistake to rely too much on the exact behavior of the assert. The correct semantics of "assert(expr)" are:
- The expression expr may or may not be evaluated.
- If expr is true, execution continues normally.
- If expr is false, what happens is undefined.