【发布时间】:2014-10-30 18:02:25
【问题描述】:
此问题的 unicode 文本可能无法在所有浏览器中正确显示。
clang 现在 (>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.;
α(alpha)和∞(infinty)对于clang的根本区别是什么?前者是unicode,后者不是unicode,但同时不是ASCII吗?
是否有解决方法或选项允许clang 中的这组字符(或gcc 中的顺便说一句)?
注意:1) ∞ 只是一个例子,有很多可能有用但也被禁止的字符,如∫ 或∂。 2)我不是在问这是否是个好主意,请把它当作一个技术问题。 3)我对Linux中clang 3.4的C++编译器感兴趣(gcc 4.8.3不支持这个)。我正在使用UTF-8 编码和Unix/Linux 行结尾使用gedit 保存源文件。 4)添加其他正常的第一个字符没有帮助:_∞
答案指向一个明确的否定。有些范围确实不是 允许也不会很快。向总数进一步移动一步 疯狂,我发现最好的选择是使用 实际上看起来相同的字符。 (现在,this 我可能承认这不是一个好主意。)可以在此处找到这些替代方案 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问题中提到的在允许范围内的其他“替代”死铃声:
ʃ、????????????????。
【问题讨论】:
-
这些名字是个糟糕的主意。你想达到什么目的?某种混淆竞赛??
-
@stefan:大概是编写看起来像数学符号的代码。如果目标受众是数学家,这不是一个坏主意。
-
@MikeSeymour 我是一名数学家,我讨厌它;-) 但很公平.. 虽然它是不可移植的。这是最大的缺点。
-
@stefan 我不认为
double const π = 3.14159265359;是在正确的上下文中使用的混淆。不可移植性是另一个问题,它是答案的一部分,毕竟标准似乎以有限的方式允许它。