a preprocessor bug (?) on processing a floating constant

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,


On preprocessing the program

   #define x 1.23 ## E+2

   int main(void)
   {
         printf("x = %g\n", x);
         return 0;
   }

the preprocessor generates the following

$ gcc -E test.c 
# 0 "test.c"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "test.c"


   int main(void)
   {
         printf("x = %g\n", 1.23E +2);
         return 0;
   }

Since x results in two tokens "1.23E" and "+2" rather than in one token
"1.23E+2", the compiler raises an error:

test.c:1:14: error: exponent has no digits
    1 |    #define x 1.23 ## E+2
      |              ^~~~
test.c:5:29: note: in expansion of macro 'x'
    5 |          printf("x = %g\n", x);
      |                             ^

On the other hand, the Standard says (3.1.8 Preprocessing Numbers):

   Preprocessing number tokens lexically include all floating and
   integer constant tokens.

Is it a preprocessor bug?  Or I miss something?


Thank you,

Andrew Makhorin




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux