2014-11-21 4 views
2

С §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, или мои рассуждения?

ответ

6

Ни один из этих трех. Это просто давняя нереализованная (вернее, только частично реализованная) функция. Он недавно был завершен и будет доступен в GCC 5. До этой версии вы можете использовать параметр командной строки -fextended-identifiers, но есть некоторые случаи, когда он ошибался, что привело к тому, что он по умолчанию не был включен.

Вы можете увидеть это в списке на Status of C99 features in GCC.

Смежные вопросы