在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