Unicode / специальные символы в именах переменных в clang не допускаются?
Этот вопрос содержит текст Unicode, который может отображаться некорректно во всех браузерах.
clang
now (> 3.3) поддерживает символы Unicode вимена переменных http://llvm.org/releases/3.3/tools/clang/docs/ReleaseNotes.html#major-new-features.
Однако некоторые специальные символы по-прежнему запрещены.
int main(){
double α = 2.; // alpha, ok!
double ∞ = 99999.; // infinity, error
}
давая:
error: non-ASCII characters are not allowed outside of literals and identifiers
double ∞ = 99999.;
В чем принципиальная разница междуα
(альфа) и∞
(бесконечность) дляclang
? Что первый является Unicode, а второй не Unicode, но в то же время не является ASCII?
Есть ли обходной путь или возможность разрешить этот набор символов вclang
(или кстати вgcc
)?
Примечания: 1)∞
это просто пример, есть много символов, которые потенциально полезны, но также запрещены, как∫
или же∂
, 2) Я не спрашиваю, если это хорошая идея, пожалуйста, примите это как технический вопрос. 3) меня интересует компилятор C ++clang 3.4
в линуксе (gcc 4.8.3
не поддерживает это). Я сохраняю исходные файлы сgedit
с помощьюUTF-8
кодирование иUnix/Linux
конец строки. 4) добавление других нормальных первых символов не помогает:_∞
Ответы указывают на определенное НЕТ. Некоторые диапазоны действительно не разрешены и не будут в ближайшее время. Чтобы сделать еще один шаг к полному сумасшествию, лучшей альтернативой, которую я нашел, было использование персонажей, которые выглядят одинаково. (Сейчас,этот Я мог бы признать, что это не очень хорошая идея.) Эти альтернативы можно найти здесьhttp://shapecatcher.com/, Результат (извините, если вам больно):
// double ∞ = 99999.; // still error
// double ⧞ = 99999.; // infinity negated still error
double ꝏ = 99999.; // letter oo
double Ꝏ = 99999.; // letter OO
// double ⧜ = 99999.; // incomplete infinity still error
Другие "альтернативные" мертвые звонки, упомянутые в вопросе, находятся в допустимом диапазоне:ʃ
, .