Могут ли переменные C ++ в файле cpp определяться как специальные символы? - PullRequest
0 голосов
/ 01 октября 2018

Можем ли мы определить переменную в c ++ / c, используя специальные символы, такие как:
double ε, µ, β, ϰ;

Если да, как этого достичь?

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Согласно рабочему проекту стандарта CPP (N4713),

5.10 Идентификаторы [lex.name]
...
Идентификатор - это произвольно длинная последовательность букв ицифры.Каждое универсальное символьное имя в идентификаторе должно обозначать символ, кодировка которого в ISO 10646 попадает в один из диапазонов, указанных в таблице 2. Первоначальный элемент не должен быть универсальным символьным именем, обозначающим символ, кодировка которого соответствуетв один из диапазонов, указанных в таблице 3.

И когда мы смотрим на таблицу 3:

Таблица 3 - Диапазоны символов, которые изначально запрещены (объединение символов)

0300-036F 1DC0-1DFF 20D0-20FF FE20-FE2F

Упомянутыми вами символами являются греческий алфавит, который варьируется от U+0370 до U+03FF, а расширенный греческий набор варьируется от U+1F0x до U+1FFx согласно википедия .Оба этих диапазона допустимы в качестве начального элемента идентификатора.

Обратите внимание, что не все компиляторы предоставляют поддержку для этого.

GCC 8.2 с параметром -std=c++17 не удаетсяcompile.
Однако Clang 7.0 с опцией -std=c++17 компилируется.

Демонстрация в реальном времени для GCC и Clang

0 голосов
/ 01 октября 2018

Поскольку вопрос помечен Visual Studio: просто напишите код, который вы ожидаете.

double β = 0.1;

Когда вы сохраните файл, Visual Studio предупредит вас, что онНеобходимо сохранить файл как Unicode.Примите это, и это работает.AFAICT, это также работает в режиме C, даже если большинство других расширений C99 не поддерживаются в Visual Studio.

Однако, начиная с g ++ 8.2, g ++ по-прежнему не поддерживает символы не ASCII, используемые непосредственно в идентификаторах, поэтомутогда код фактически не переносим.

0 голосов
/ 01 октября 2018

Да, вы можете использовать специальные символы, но не все из них.Разрешенный список можно найти по ссылке ниже.

Подробное объяснение того, как создать идентификатор (со списком разрешенных символов Юникода), можно найти на странице Идентификаторы - cppreference.com *Допустимый идентификатор должен начинаться с нецифрового символа (латинская буква, подчеркивание или нецифровый символ Unicode).Идентификаторы чувствительны к регистру (строчные и прописные буквы различны), и каждый символ является значимым.

Кроме того, символы Unicode должны быть экранированы.

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