Next: REQUIRE..., Previous: EIFFEL_CHECK, Up: eiffel.h
At the suggestion of Bertrand Meyer (Eiffel's author) the DO and
END macros have been added to ‘eiffel.h’. Note that these
are only available if you define the EIFFEL_DOEND macro. To use
these macros each of your methods should use DO ... END as
their outermost brackets. For example:
// compiled with EIFFEL_DOEND defined
void Stack::push(int n)
DO // checks the class invariant + {
...
END // check the class invariant + }
If you do not define the EIFFEL_DOEND macro then ‘eiffel.h’
reverts to its old behaviour where ‘REQUIRE’ and ‘ENSURE’ also
check the class invariant. Thus to check the class invariant when you
are not using DO and END you would need to call
REQUIRE and ENSURE, for example:
// compile with EIFFEL_DOEND undefined (i.e. old behaviour)
void Stack::push(int n)
{
REQUIRE(true); // checks the invariant as well as the precondition
ENSURE(true); // checks the invariant as well as the postcondition
}
As for which one to option to pick, Bertrand Meyer is in favour of the
DO ... END solution.