Rather than attempting to remove the macro from the list, this just sets a "zombie" flag against the macro definition. Subsequent attempts to use or undef that macro ignore any macro marked zombie, and no warning is issued if you redeclare on top of a zombie.