Здравствуйте, SaZ, Вы писали:
SaZ>Это я чего-то не знаю про константы или это какая-то фича языка?
Похоже их парсер не смог определиться, интегральный это тип, или FP...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Вычисление констант в шестнадцатиричной форме. Баг?
Здравствуйте, Слава, Вы писали:
SaZ>>[ccode] SaZ>> Foo( 0xE+1 ); С>Вставь пробел перед +, С>проверка тут
А при чём тут пробел-то?..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Вычисление констант в шестнадцатиричной форме. Баг?
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Слава, Вы писали:
SaZ>>>[ccode] SaZ>>> Foo( 0xE+1 ); С>>Вставь пробел перед +, С>>проверка тут
E>А при чём тут пробел-то?..
С пробелом скомпилировалось, мож кимпилятор всё, что стоит 0х считает шеснадцетиричной константой.
Спасибо за внимание
Re[4]: Вычисление констант в шестнадцатиричной форме. Баг?
С>>>Вставь пробел перед +, С>>>проверка тут E>>А при чём тут пробел-то?.. С>С пробелом скомпилировалось, мож кимпилятор всё, что стоит 0х считает шеснадцетиричной константой.
Выше уже сказали — компилятор подумал что похоже на плавучку: 1e+1
Re: Вычисление констант в шестнадцатиричной форме. Баг?
Здравствуйте, SaZ, Вы писали:
SaZ>Данный код не компилируется: SaZ>
SaZ> Foo( 0xE+1 );
SaZ>
SaZ>Это я чего-то не знаю про константы или это какая-то фича языка?
Похоже, что GCC увидел здесь User-defined literal. Согласно 2.14.8 (я смотрю драфт от 2010/11/27), суффикс должен удовлетворять ограничениям на идентификатор, чему "+1" явно не соответствует. Я думаю, можно заносить баг на GCC, чтобы вычеркнули плюсик из соответствующего места.
Re: Вычисление констант в шестнадцатиричной форме. Баг?
Здравствуйте, SaZ, Вы писали:
SaZ>Данный код не компилируется:
SaZ> Foo( 0xE+1 );
SaZ>Это я чего-то не знаю про константы или это какая-то фича языка?
На 3-ей фазе трансляции исходный файл разбивается на preprocessing tokens. При разбиении используется "жадный" алгоритм лексического разбора:
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, even if that would cause further lexical analysis to fail.
В грамматике preprocessing number определяется следующим образом:
pp-number:digit
. digitpp-numberdigitpp-numbernondigitpp-number e signpp-number E signpp-number .
Соответственно, 0xE+1 разбивается на два preprocessing tokens: 0xE+ и 1.
На 7-ой фазе трансляции каждый отдельный preprocessing token преобразуется в token:
Each preprocessing token that is converted to a token (2.6) shall have the lexical form of a keyword, an identifier, a literal, an operator, or a punctuator.
Ни к одному из валидных типов лексем (tokens) 0xE+ не принадлежит.
Re[2]: Вычисление констант в шестнадцатиричной форме. Баг?