Next: , Previous: EIFFEL_CHECK, Up: eiffel.h


4.14.2 DOEND: adding DO ... END

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.