In many of the C and C++ files I have seen macros like this:
#ifdef X
#undef X // no statements in between
#endif
I feel that, it's adequate to simply write:
#undef X
If the macro X
wasn't defined, then the #undef
should have no effect.
Is it ok to put standalone #undef
, if I want to only undefine a macro ? Does that make the coding practice bad in anyway ?
See ISO C99 6.10.3.5 paragraph 2.
A preprocessing directive of the form
# undef identifier new-line
causes the specified identifier no longer to be defined as a macro name. It is ignored if the specified identifier is not currently defined as a macro name.
Even Visual C++ 6 (which was notorious for bad standards compliance) allows this:
You can also apply the
#undef
directive to an identifier that has no previous definition. This ensures that the identifier is undefined. Macro replacement is not performed within#undef
statements.