不允许在clang中的变量名中使用Unicode /特殊字符?

时间:2014-10-30 18:02:25

标签: c++ gcc 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.;

α的{​​{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 ʃ

1 个答案:

答案 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++确实提供了有关影响的一些细节。