在C ++代码中使用“变音符号”

可能重复:
unicode中的C ++源代码

我刚刚在一个项目中发现了这一行代码:

string überwachung;

我很惊讶,因为实际上我认为你不允许在C ++代码中使用类似'äöü'的变音符号而不是在字符串等等,并且会导致编译器错误。 但是,这与Visual Studio 2008编译得很好。

  • 这是一个特殊的微软功能,还是其他编译器允许的元语言?
  • 是否有任何潜在的问题(可移植性,系统语言设置..)?
  • 我清楚地记得这是不允许的。 它什么时候改变了?
  • 善意的问候任何澄清

    PS:即使编译,工具cppcheck甚至会将此用法标记为错误


    GCC抱怨:键盘

    :错误:在程序中遗漏' 303'

    C ++语言标准本身将基本源字符集限制为91个可打印字符以及全部在ASCII内的制表符,换页符和换行符。 但是,有一个很好的脚注:

    基本源字符集成员的字形旨在标识与ASCII字符集对应的ISO / IEC 10646子集中的字符。 但是,由于从源文件字符到源字符集(在翻译阶段1中描述)映射被指定为实现定义,因此需要一个实现来记录源文件中如何表示基本源字符。

    翻译阶段1(重点是我的)

    必要时,以实现定义的方式将物理源文件字符映射到基本源字符集(为行尾指示符引入新行字符)。 接受的物理源文件字符集是实现定义的。

    一般来说,你不应该在你的代码中使用元音变音或其他特殊字符。 如果可以工作,但是如果可以的话,这是编译器特有的功能。


    参见C ++ 03标准的E / 2部分:

    1本节列出了在C ++标识符(2.10)中的通用字符名称中有效的十六进制代码值的完整集合。

    ...

    拉丁语:00c0-00d6,00d8-00f6,00f8-01f5,01fa-0217,0250-02a8,1e00-1e9a,1ea0-1ef9

    这包括大部分重音字母。

    问题在于C ++ 03没有将UTF-8指定为输入格式。 即使C ++ 11也保持与EBCDIC的兼容性。

    所以,你当然可以用变音符号创建一个标识符; 问题是获得一个文本编辑器来解释通用字符名称并正确显示它。 否则你坚持以十六进制格式直接输入统一uXXXX ,如u00FCü

    一个接受字符串常量而不是标识符的UTF-8的编译器会遭受短视的实现。 至少,Clang在第一阶段将UTF-8正确地转换为通用字符名称。


    我相信这是适用的条款...

    2.2字符集

    基本源字符集由96个字符组成:空格字符,代表水平制表符,垂直制表符,换页符和换行符的控制字符,以及以下91个图形字符:

    a b c d e f g h i j k l m n o p q r s t u v w x y z
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    0 1 2 3 4 5 6 7 8 9
    _ { } [ ] # ( ) < > % : ; . ? * + - / ˆ & | ˜ ! = ,  " ’
    

    因此,unlaut的使用似乎是编译器特定的扩展。

    链接地址: http://www.djcxy.com/p/86303.html

    上一篇: Using "umlauts" in C++ code

    下一篇: How can a virus exist in an image?