|
VMS Help CXX, Qualifiers, /EXCEPTIONS *Conan The Librarian |
/EXCEPTIONS
/EXCEPTIONS=CLEANUP (D)
/EXCEPTIONS=NOCLEANUP (Alpha only)
/EXCEPTIONS=EXPLICIT (D)
/EXCEPTIONS=IMPLICIT (Alpha only)
/NOEXCEPTIONS
Controls whether support for C++ exceptions is enabled or
disabled. C++ exceptions are enabled by default (equivalent
to /EXCEPTIONS=CLEANUP). When C++ exceptions are enabled, the
compiler generates code for throw expressions, try blocks, and
catch statements. The compiler also generates special code for
main programs so that the terminate() routine is called for
unhandled exceptions. You can select from the following options:
CLEANUP Generate cleanup code for automatic objects. When an
exception is handled at run-time and control passes
from a throw-point to a handler, call the destructors
for all automatic objects that were constructed because
the try-block containing the handler was entered.
NOCLEANUP Do not generate cleanup code. Using this option can
(Alpha reduce the size of your executable when you want to
only) throw and handle exceptions and cleanup of automatic
objects during exception processing is not important
for your application.
The NOCLEANUP option is ignored on I64 systems.
EXPLICIT Tells the compiler to assume the standard C++ rules
about exceptions. Catch clauses can catch only those
exceptions resulting from the evaluation of a throw
expression within the body of the catch clause's try
block or from within a procedure called from within the
catch clause's try block.
IMPLICIT On Alpha systems, tells the compiler that an exception
(Alpha might be thrown at any time the program is executing
only) code within the body of the try block. These exceptions
might be the result of a throw expression, hardware
errors, or software errors (such as dereferencing an
invalid pointer).
Specifying /EXCEPTIONS=IMPLICIT seriously interferes
with the compiler's ability to optimize code. When the
compiler optimizes a function, it must ensure that the
values of all variables after an exception is caught
remain the same as they were at the point where the
exception was throw. The optimizer is therefore limited
in its ability to rearrange stores and expressions that
might cause an exception to be thrown.
With /EXCEPTIONS=EXPLICIT, this is not a serious
restriction, because the compiler cannot rearrange
stores and expressions around the code that explicitly
raises an exception. In implicit exception mode,
however, almost any code has the potential to cause an
exception to be thrown, thereby dramatically reducing
the optimizer's ability to rearrange code.
Also, if the compiler can determine that no throw
expressions occur within a try block, it can eliminate
the exception handling overhead the try block
introduces, including all code within the catch clauses
associated with the try block. Because no exceptions
can occur during the execution of the code within
the try block, no code within the catch clauses can
ever be executed. The compiler cannot do this with
/EXCEPTIONS=IMPLICIT.
Use /EXCEPTIONS=IMPLICIT if your program converts
signals to C++ exceptions by calling cxxl$set_
condition(cxx_exception). Failure to do so may result
in your code not catching the exceptions produced by
signals.
The /NOEXCEPTIONS qualifier disables C++ exceptions as follows:
1. The compiler issues errors for throw expressions, try blocks,
and catch statements, but might generate code for these
constructs.
2. On Alpha systems, the compiler does not generate cleanup code
for automatic objects.
3. The compiler does not generate special code for main programs
so that the terminate() function is called for unhandled
exceptions.
The /EXCEPTIONS qualifer defines the macro __EXCEPTIONS.
|
|