Not a perfect defense either. If you ever have the misfortune of using mentor graphics code, they #define REGISTER. They also ship a standard library that uses the register keyword. If you build a project using their standard library and their toolchain together, it explodes. If you name something like set_register, it also explodes.
#ifdef MY_MACRO
#error
#endif
edit: and #undef MY_MACRO after done using it, ideally.