Re: Exception Handling in Release Mode
There is no exception being thrown in this code. What you are seeing in
debug mode seems to be a platform (i.e. Windows) specific extension that
converts certain runtime errors, such as an integer division by zero,
into C++ exceptions. That is, your code is turned into something to the
effect of:
try
{
#ifndef _NDEBUG
if (i == 0)
throw DivisionByZeroException();
#endif
int m = 17/i;
}
Before we get to the platform-specific stuff let's answer the original
question - "Why don't I catch an exception is release mode"
The answer is simple. In release mode the compiler has optimised away
the division. The code basically becomes:
int main(int argc, char* argv[])
{
cout <<"End of Main" <<endl;
return 0;
}
It is allowed to do this because, from a C++ point of view, the other
code has no observable effect.
Next the platform specific stuff. Microsoft use exactly the same
exception handling mechanism to handle C++ exceptions and OS/HW
exceptions, so catch(...) will catch exceptions of all types
(including a HW generated zero divide). This can happen in both debug
and release modes (depending on the compiler settings - see Daniel
Krugler's post).
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]