С §6.4.2 проекта WG14/N1124 в спецификации C99, "Идентификаторы":Предоставляет ли C99 универсальные имена символов в идентификаторах?
identifier: identifier-nondigit identifier identifier-nondigit identifier digit identifier-nondigit: nondigit universal-character-name other implementation-defined characters
И §6.4.3, "Универсальные имена персонажей":
universal-character-name: \u hex-quad \U hex-quad hex-quad
Это похоже на то, что идентификатор, такой как foo\u00AAbar
, действителен в соответствии с грамматикой. Я не могу найти что-либо в семантике, которая предполагает иное. Тем не менее, GCC отвергает такой идентификатор, даже не пытаясь разобрать его:
<stdin>:2: error: stray ‘\’ in program
<stdin>:2: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘u00AAbar’
<stdin>:2: error: ‘u00AAbar’ undeclared (first use in this function)
Является ли это упущение в НКУ, стандарт C99, или мои рассуждения?