此问题的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.;
α
的{{1}}(alpha)和∞
(infinty)之间的根本区别是什么?前者是unicode而后者不是unicode但同时不是ASCII?
是否有解决方法或选项允许clang
中的这组字符(或clang
中的BTW)?
注意:1)gcc
只是一个例子,有很多字符可能有用但也被禁止,例如∞
或∫
。 2)我不是在问这个好主意,请把它作为技术问题。 3)我对Linux中的∂
的C ++编译器很感兴趣(clang 3.4
不支持这个)。我使用gcc 4.8.3
编码和gedit
行结尾使用UTF-8
保存源文件。 4)添加其他正常的第一个字符无济于事:Unix/Linux
答案指向肯定的NO。有些范围确实不是 允许也不会很快。进一步向总计迈进一步 疯狂,我找到的最好的选择是使用 有效看起来相同的字符。 (现在,这个我可能会承认这不是一个好主意。)这些替代品可以在这里找到 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
,ʃ
。
答案 0 :(得分:9)
所以clang
文件说(强调我的):
此功能允许标识符包含某些Unicode字符, 按活动语言标准;
指定
draft C++ standard 附件E 中涵盖了这一点,允许的字符如下:
E.1允许的字符范围[charname.allowed]
<00> 00A8,00AA,00AD,00AF,00B2-00B5,00B7-00BA,00BC-00BE,00C0-00D6,00D8-00F6,00F8-00FF
0100-167F,1681-180D,180F-1FFF 200B-200D,202A-202E,203F-2040,2054,
2060-206F 2070-218F,2460-24FF,2776-2793,2C00-2DFF,2E80-2FFF
3004-3007,3021-302F,3031-303F
3040-D7FF F900-FD3D,FD40-FDCF,
FDF0-FE44,FE47-FFFD
10000-1FFFD,20000-2FFFD,30000-3FFFD, 40000-4FFFD,50000-5FFFD,60000-6FFFD,70000-7FFFD,80000-8FFFD, 90000-9FFFD,A0000-AFFFD,B0000-BFFFD,C0000-CFFFD,D0000-DFFFD, E0000-EFFFD
无限221E
的代码未包含在列表中。
供参考:以上代码转换为unicode字符(其中一些可能无法在所有浏览器/可用字体中正确显示)。
¨, ª, ,
¯, ²-µ, ·-º, ¼-¾, À-Ö, Ø-ö, ø-ÿ
Ā-ᙿ, ᚁ-᠍, ᠏- -, -, ‿-⁀, ⁔,
- ⁰-, ①-⓿, ❶-➓, Ⰰ-ⷿ, ⺀-
〄-〇, 〡-〯, 〱-〿
- 豈-ﴽ, ﵀-﷏,
ﷰ-﹄, ﹇-�
-, -, -, -, -, -, -, -, -, -, -, -, -, -
我找不到涵盖所选范围基本原理的大量文件,尽管N3146: Recommendations for extended identifier characters for C and C++确实提供了有关影响的一些细节。