C to C++ condition handling
C++ exception handling uses throw()/try()/catch()
, whereas C uses
signal()/raise()
or sigaction()/kill()
. Mixing C and C++ exception
handling in a C to C++ ILC module will result in undefined behavior. If you use only the C exception
handling model, a C++ routine can register a signal handler via signal
to handle
exceptions (software/hardware) raised by either a C or C++ routine. However, the behavior of running
destructors for static/automatic objects is undefined.
If you use only the C++ exception handling model, only C++ routines will be able to
catch()/handle()
thrown objects. C routines do not have
try()/catch()/throw()
abilities nor can they use signal()
to
register a handler for thrown objects. A C++ routine cannot register a handler via
signal()
to catch thrown objects; it must use catch()
clauses. C
routines will ignore thrown objects.