The preprocessor is not a text processor, it works on the level of tokens. In your code, after the define, every occurence of the token X
would be replaced by the token 10
. However, there is not token X
in the rest of your code.
1e-X
is syntactically invalid and cannot be turned into a token, which is basically what the error is telling you (it says that to make it a valid token — in this case a floating point literal — you have to provide a valid exponent).