blob: 1b7a38c1b029c0015e381c054cbac757e6d0434d [file] [log] [blame]
cexcept: README 2.0.1-optipng (2011-Jul-22)
Updated by Cosmin Truta
http://www.nicemice.net/cexcept/
Adam M. Costello
http://www.nicemice.net/amc/
cexcept (pronounced "see except" in English) is a package providing
a Try/Catch/Throw exception handling interface for ANSI C (C89 and
subsequent ISO standards). It does not attempt to handle system
exceptions like floating-point exceptions or addressing exceptions, nor
compiler-generated exceptions like C++ exceptions; it is intended as an
enhanced user-friendly alternative to setjmp() and longjmp().
The package consists of the following files:
name version
---------- -------
README 2.0.1-optipng
cexcept.h 2.0.1-optipng
example1.c 2.0.0
example2.c 2.0.0
rationale 2.0.0
The package is both free-as-in-speech and free-as-in-beer:
Copyright (c) 2000-2008 Adam M. Costello and Cosmin Truta.
This package may be modified only if its author and version
information is updated accurately, and may be redistributed
only if accompanied by this unaltered notice. Subject to those
restrictions, permission is granted to anyone to do anything with
this package. The copyright holders make no guarantees regarding
this package, and are not responsible for any damage resulting from
its use.
The version number of this README file can be considered the version
number of the whole package.
The file cexcept.h contains the documentation and implementation of the
interface. The other files are supporting documents.
The project web page is:
http://www.nicemice.net/cexcept/
Here is another place to obtain the package, not guaranteed to always
have the very latest version, but probably more highly available:
http://cexcept.sourceforge.net/
The remainder of this file is a log of changes.
2011-Jul-22-Fri
cexcept.h 2.0.1 --> 2.0.1-optipng
* Made exception__prev volatile to avoid "variable might be clobbered
by longjmp" warnings when a function contains multiple Try blocks.
2008-Jul-23-Wed
cexcept.h 2.0.0 --> 2.0.1
* Clarified the license.
* Reworded the introductory comments.
* Bug fix: The statement following Try could not be an if-statement
(without else); the Catch would then be parsed wrong.
* Quieted a new warning in gcc 4.2.
README 2.0.0 --> 2.0.1
* Reworded the license to agree with cexcept.h.
* Updated the URLs.
2001-Jul-12-Thu
cexcept.h 1.0.0 --> 2.0.0
* The documentation had neglected to mention that the Catch
expression was evaluated before the Try clause was executed.
Rather than document this unintuitive behavior, we have changed
the interface so that the Catch expression is not evaluated unless
and until an exception is caught. This change will not affect
applications that never used Catch expressions with side effects.
* The implementation had been technically incorrect because it
modified the object named by the Catch expression between the
setjmp and longjmp calls, even though it might be a non-volatile
automatic object (which it was in example.c). The problem (which
affected no known compilers) has been corrected by performing two
copies: first into volatile temporary storage before the longjmp,
then into the Catch expression after the longjmp.
* The requirement that the Catch expression have the "exact same
type" that was passed to define_exception_type() has been slightly
relaxed to disregard type qualifiers.
* In the license, "no guarantees about the correctness of this file"
has been changed to "no guarantees regarding this file".
* Notes have been added that "real" exceptions are not supported, and
the size of the exception type has performance implications.
rationale 1.0.0 --> 2.0.0
* Removed the obsolete question about why the Catch expression is
always evaluated.
* Updated the answer to the question about the type of the Catch
expression, to correspond to the new implementation.
* Added a question about why two copies are necessary.
* Added a question about why "real" exceptions cannot be caught.
example.c 1.0.0 --> example1.c 2.0.0
example2.c 1.0.0 --> 2.0.0
* Renamed example.c to example1.c.
* Changed the version number to agree with cexcept.h in the first
two places (2.0.*).
README 1.0.0 --> 2.0.0
* Reworded the license to agree with cexcept.h.
* Changed the version number to agree with cexcept.h in the first
two places (2.0.*).
2000-Jun-21-Wed
cexcept.h 0.6.1 --> 1.0.0
* Changed the version number to indicate stability.
* Changed "an lvalue" to "a modifiable lvalue" to agree with the
language in the ISO C Standard.
* Added hints about dealing with the inability to return from a Try
clause, and with automatic variables modified within a Try clause.
* Clarified the restriction on Throw'ing a comma-expression.
example.c 0.6.0 --> 1.0.0
* Changed the version number to agree with cexcept.h in the first
two places (1.0.*).
example2.c 0.6.0 --> 1.0.0
* Changed the version number to agree with cexcept.h in the first
two places (1.0.*).
rationale 0.6.1 --> 1.0.0
* Changed the version number to agree with cexcept.h in the first
two places (1.0.*).
README 0.6.3 --> 1.0.0
* Changed the version number to agree with cexcept.h in the first
two places (1.0.*).
2000-Apr-22-Sat
cexcept.h 0.6.0 --> 0.6.1
* Clarified that the wrapper .h file is needed only when there are
multiple .c files.
2000-Apr-08-Sat
rationale 0.6.0 --> 0.6.1
* Added rationale for disallowing jumping in/out of Try clauses.
* Expanded the discussion of finally clauses.
* Added rationale for the lack of expressionless Throw.
2000-Apr-07-Fri
Created README, which incorporates changelog.
cexcept.h amc.0.5.3 --> 0.6.0
* The expression passed to Catch must now have exactly the same type
passed to define_exception_type(), and it is always evaluated
exactly once, regardless of whether an exception is caught.
* Added Catch_anonymous.
* Changed init_exception_context() to take an argument, and to be
optional for statically allocated contexts.
* Clarified allowable exception types, added examples.
* Clarified the restrictions on jumping in Try/Catch statements.
* Reworded some other parts of the documentation.
cexcept-example.c amc.0.5.0 --> example.c 0.6.0
* Now uses the 0.6.* interface, and demonstrates Catch_anonymous.
cexcept-example2.c amc.0.5.0 --> example2.c 0.6.0
* Now uses the 0.6.* interface.
cexcept-rationale amc.0.5.1 --> rationale 0.6.0
* Added rationale for the new Catch expression semantics.
2000-Apr-01-Fri
cexcept.h amc.0.5.2 --> amc.0.5.3
* Eliminated a compiler warning about an uninitialized variable.
* Improved the documentation of allowable exception types.
* Added advice about using a macro for the_exception_context, and
changed the example accordingly.
* Improved the documentation regarding jumping out of Try and Catch.
Earlier changes were not logged.