On Sun, Sep 21, 2014 at 6:56 PM, Steve Kargl <s...@troutmask.apl.washington.edu> wrote: > + is a binary operator. 0x3ffe is a hexidecimal-constant according > to 6.6.4.1 in n1256.pdf. 63 is, of course, a decimal-constant.
This is before tokens happen and during lexing of the program. e+64 is exponent-part see 6.4.4.2. Also see 6.4/4-5: If the input stream has been parsed into preprocessing tokens up to a given character, the next preprocessing token is the longest sequence of characters that could constitute a preprocessing token. There is one exception to this rule: header name preprocessing tokens are recognized only within #include preprocessing directives and in implementation-defined locations within #pragma directives. In such contexts, a sequence of characters that could be either a header name or a string literal is recognized as the former. 5 EXAMPLE 1 The program fragment 1Ex is parsed as a preprocessing number token (one that is not a valid floating or integer constant token), even though a parse as the pair of preprocessing tokens 1 and Ex might produce a valid expression (for example, if Ex were a macro defined as +1). Similarly, the program fragment 1E1 is parsed as a preprocessing number (one that is a valid floating constant token), whether or not E is a macro name. Thanks, Andrew Pinski > > -- > steve > > On Sun, Sep 21, 2014 at 06:49:54PM -0700, Andrew Pinski wrote: >> On Sun, Sep 21, 2014 at 6:23 PM, Steve Kargl >> <s...@troutmask.apl.washington.edu> wrote: >> >> No e+ is exponent marker. >> >> >> > #include <stdio.h> >> > #include <stdint.h> >> > >> > int >> > main(void) >> > { >> > uint16_t i; >> > i = 0x3ff0+63; printf("%x\n", i); >> > i = 0x3ff1+63; printf("%x\n", i); >> > i = 0x3ff2+63; printf("%x\n", i); >> > i = 0x3ff3+63; printf("%x\n", i); >> > i = 0x3ff4+63; printf("%x\n", i); >> > i = 0x3ff4+63; printf("%x\n", i); >> > i = 0x3ff6+63; printf("%x\n", i); >> > i = 0x3ff7+63; printf("%x\n", i); >> > i = 0x3ff8+63; printf("%x\n", i); >> > i = 0x3ff9+63; printf("%x\n", i); >> > i = 0x3ffa+63; printf("%x\n", i); >> > i = 0x3ffb+63; printf("%x\n", i); >> > i = 0x3ffc+63; printf("%x\n", i); >> > i = 0x3ffd+63; printf("%x\n", i); >> > i = 0x3ffe+63; printf("%x\n", i); >> > i = 0x3fff+63; printf("%x\n", i); >> > return 0; >> > } >> > >> > -- >> > Steve > > -- > Steve