I know what this means
#define M(B) (1U << ((sizeof(x) * CHAR_BIT) - B)) // CHAR_BIT=bits/byte
but I don't understand this one well:
#undef M
After this, what happens? Is M cleared, deleted, or?
M