макропроцессор (macro processor)
Использование в приложениях (Application usage)
The defn macro is useful for renaming macros, especially built-
ins.
Since eval defers to the ISO C standard, some operations have
undefined behavior. In some implementations, division or
remainder by zero cause a fatal signal, even if the division
occurs on the short-circuited branch of "&&" or "||". Any
operation that overflows in signed arithmetic produces undefined
behavior. Likewise, using the shift operators with a shift amount
that is not positive and smaller than the precision is undefined,
as is shifting a negative number to the right. Historically, not
all implementations obeyed C-language precedence rules: '~' and
'!' were lower than '=='; '==' and '!=' were not lower than '<';
and '|' was not lower than '^'; the liberal use of "()" can force
the desired precedence even with these non-compliant
implementations. Furthermore, some traditional implementations
treated '^' as an exponentiation operator, although most
implementations now use "**" as an extension for this purpose.
When a macro has been multiply defined via the pushdef macro, it
is unspecified whether the define macro will alter only the most
recent definition (as though by popdef and pushdef), or replace
the entire stack of definitions with a single definition (as
though by undefine and pushdef). An application desiring
particular behavior for the define macro in this case can
redefine it accordingly.
Applications should use the mkstemp macro instead of the
obsolescent maketemp macro for creating temporary files.