In general, to answer a question like this we need to see the complete and unedited text of the error messages, and it also really helps if you provide a complete program that we can attempt to compile for ourselves. (It might seem to you that the error messages are useless, but often it's just that they only make sense if you know how to think like a compiler engineer.)
However, in this case, I can make a high-confidence guess, because the only difference between the two macros is that the one that doesn't work uses a binary number, 0b10, and the one that does work uses a hexadecimal number, 0x2. Binary numbers are not part of any version of the C standard, although they are a common extension. I therefore deduce that your compiler doesn't support them and is giving an unclear error message when it encounters them.
0b10is not part of standard C.0x2 << 10vs1 << 11or2 << 11?#define SMI_READ (1u << 11):: always force unsigned for bitmasks. (even in cases like this where it is not(yet) important)0b10, but the question is about C so I won't bring it up. I will, however, mention that gcc supports binary constants as an extension, and other C compilers probably do as well. I wouldn't be astonished if a future C standard added binary constants, but I'm not holding my breath.