red floyd said:
They are synonymous, except that !defined can be used in a
preprocessor expression...
This is not an exception to the assertion that these commands
are synonymous, because assertions about whether »!defined«
can be used in such an expression are not in the scope of the
assertion of the synonymity of these two preprocessor
commands.
For another example, the statements »i++;« and »++i;« are
synonymous, but the expressions »i++« and »++i« are not.
But the assertion about the expressions is not an exception
to the assertion about the statements.
However, the above »preprocessor commands« actually are not
commands at all, but directives - preprocessing directives.