Can someone points me the problem in the code when compiled with gcc 4.1.0.
#define X 10
int main()
{
double a = 1e-X;
return 0;
}
I am getting error:Exponent has no digits.
When I replace X with 10, it works fine. Also I checked with g++ -E command to see the file with preprocessors applied, it has not replaced X with 10.
I was under the impression that preprocessor replaces every macro defined in the file with the replacement text with applying any intelligence. Am I wrong?
I know this is a really silly question but I am confused and I would rather be silly than confused :).
Any comments/suggestions?
When you write
1e-Xall together like that, theXisn’t a separate symbol for the preprocessor to replace – there needs to be whitespace (or certain other symbols) on either side. Think about it a little and you’ll realize why.. 🙂Edit: “12-X” is valid because it gets parsed as “12”, “-“, “X” which are three separate tokens. “1e-X” can’t be split like that because “1e-” doesn’t form a valid token by itself, as Jonathan mentioned in his answer.
As for the solution to your problem, you can use token-concatenation: