[an error occurred while processing this directive] Node:0xfe+0x20, Next:, Previous:Cross-DJGPP, Up:Miscellany

22.10 GCC says "garbage at end of number"

Q: There is a severe bug in GCC: it says "garbage at end of number" for this line:

 i = 0xfe+0x20;

Ain't it silly that such a great compiler would fail so miserably?

A: That's not a bug, that's a feature of the ANSI C language definition. By ANSI rules, the above expression is a single preprocessing token, unless you place whitespace in front of the plus sign. The reason for this seemingly counterintuitive feature is the syntax of floating-point constants in which letters `e' and `E' followed immediately by a sign signal a decimal exponent. You can use the -traditional compiler switch to turn this feature off (however, it will also turn off a plethora of other ANSI features; see the GCC docs for details).

Judging by the published draft, this is unchanged even in the forthcoming C9X standard.


[an error occurred while processing this directive]