The preprocessor starts its scan at the beginning of its input and proceeds sequentially. When preprocessor statements are found they are executed immediately (except for preprocessor procedures, which are executed only when referenced).
An identifier that matches the name of an active preprocessor variable is replaced in the preprocessor output by the value of the variable. When an identifier matches the name of an active preprocessor function (either programmer-written or built-in) the function is invoked and the invocation is replaced by the returned value. For a discussion about activation, replacement, and rescanning, see the %ACTIVATE statement.