макропроцессор (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.