C универсальные имена макросов - gcc -fextended-идентификаторы - PullRequest
3 голосов
/ 19 января 2011

Я ищу, как мне написать имя идентификатора с такими символами, как ['"или #.

Каждый раз, когда я пытаюсь это сделать, я выдаю ошибку:

ошибка: имена макросов должны быть идентификаторами

Но, узнав о gcc, я нашел эту опцию:

-fextended-идентификаторы

Но, похоже, не работает, как я хотел, пожалуйста, кто-нибудь знает, как этого добиться?

Ответы [ 3 ]

2 голосов
/ 19 января 2011

Идентификаторы не могут включать такие символы. Таким образом, в синтаксисе языка идентификаторы обозначаются буквами, цифрами или подчеркиванием (и не должны начинаться с цифры, чтобы избежать двусмысленности с буквенными числами).

Если бы это было возможно, это конфликтовало бы с компилятором C (который использует [для массивов) и синтаксисом препроцессора C (который использует #). Расширение расширенных идентификаторов позволяет использовать только символы, не запрещенные языковым синтаксисом, внутри идентификаторов (в основном, иностранные буквы в юникоде и т.

Но если вы действительно, действительно хотите это сделать, ничто не запрещает вам предварительно обрабатывать ваши исходные файлы с помощью вашего собственного "расширенного препроцессора макросов", практически создавая новый язык "C". Это похоже на ужасную идею, но это не так сложно сделать. Тогда вы сами достаточно скоро поймете, почему это не очень хорошая идея ...

0 голосов
/ 19 января 2011

Даже если поддержка символов расширенного идентификатора была полностью включена, это не поможет вам получить такие символы, как:

[ ' " #

включено для идентификаторов. Стандарт допускает, чтобы «универсальные имена символов» или «другие символы, определяемые реализацией» были частью идентификатора, но они не могут быть частью базового набора символов. Из базового набора символов только _, буквы и цифры могут быть частью имени идентификатора (6.4.2.1 Идентификаторы / Общие).

0 голосов
/ 19 января 2011

Согласно эта ссылка , -fextended-identifiers включает только поддержку идентификаторов UTF-8, поэтому в вашем случае это не поможет.

Итак, ответ таков: Вы не можете использовать такие символы в идентификаторах макросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...