Несмотря на то, что старожил, я боюсь, что я больше не разбираюсь в синтаксическом анализе констант в C. Второй из следующих 1-лайнеров не компилируется:
int main( void ) { return (0xe +2); }
int main( void ) { return (0xe+2); }
$ gcc -s weird.c
weird.c: In function ‘main:
weird.c:1:28: error: invalid suffix "+2" on integer constant
int main( void ) { return (0xe+2); }
^
Причина сбоя компиляции, вероятно, состоит в том, что 0xe + 2 анализируется как шестнадцатеричная константа с плавающей запятой в соответствии с стандартным предложением C11 6.4.4.2. Мой вопрос заключается в том, существует ли конвенция для написания простых добавлений шестнадцатеричных и десятичных чисел в C, я не люблю полагаться на пустое пространство при разборе.
Это было с версией gcc версии 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.9). Прекращение компиляции после предварительной обработки (-E) показывает, что сбой компиляции происходит в gcc not cpp.