В спецификации перечислены категории рр лексем в 2,5, но содержит последнюю категориюКакие символы остались для pp-токенов?
каждый небелый-пробел, который не может быть один из вышеперечисленных
У меня есть трудно найти пример, когда маркер pp, захвативший такой символ, дает действительную C++-программу. Как объясняется 2.5, программа может содержать маркер диких "
или '
, но тогда поведение не определено. Есть ли пример действительной программы?
Hm, только символ \ те из этих блуждающих токенов совпадает с последней категорией маркеров pp, потому что это единственный символ в этой строке, который находится в базовом наборе символов. Остальные станут UCN (идентификаторы), или я что-то упускаю? Я принимаю это из-за идеи '#if 0' и идеи stringize/concatenate. Благодаря! –
Только определенные UCN могут формировать идентификаторы (§E). Технически я считаю, что три расширенных символа образуют блуждающую обратную косую черту, а затем буквенно-цифровую последовательность, которая становится идентификатором. Это связано с явным максимальным правилом munch. (На самом деле, это означает, что диакритические знаки * не могут быть сочтены, потому что только операторная косая черта рассматривается оператором '##'!) – Potatoswatter
«может» или «может»? Если это «возможно», то в соответствии с директивами IEC недопустимая последовательность символов должна по-прежнему лексироваться как идентификатор и позже отклоняться как недопустимая. –