The evaluation of an expression which has been compiled may be different from interpretation. Some of the more important differences are listed here. Subsequent sections of this chapter will discuss these differences in more detail.
The application of a macro is replaced by its expansion. Therefore, the definition of the macro must preceed its use. Since the call on the macro has been replaced, a redefinition of the macro will have not have an effect on the compiled expression.
A constant expression is replaced by its value (see the section Constant Declaration for more information)
There are some functions which are defined in two ways. One of these versions will reduce the execution time by not verifying that the arguments are of correct type. Which function is called from the compiled code is based upon the value of a switch. If the switch is non-nil then the faster version replaces the slower one. Note that an instance of the faster version is not replaced by the slower one when the switch is set to nil (see the section Switches that Control the Compiler for more information).
An attempt is made to convert recursive control structures to iterative ones.