wef*_*fa3 5 c++ unicode gcc variable-names
我听说可以使用 Unicode 变量名-fextended-identifiersGCC 中的标志来使用 Unicode 变量名。所以我用C++编写了一个测试程序,但它无法编译。
#include <iostream>\n#include <string>\n\n#define \xc2\xac !\n#define \xe2\x89\xa0 !=\n#define \xc2\xab <<\n#define \xc2\xbb >>\n\n/* uniq: remove duplicate lines from stdin */\nint main() {\n std::string s;\n std::string t = "";\n while (cin \xc2\xbb s) {\n if (s \xe2\x89\xa0 t)\n cout \xc2\xab s;\n t = s;\n }\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n我收到这些错误:
\n#include <iostream>\n#include <string>\n\n#define \xc2\xac !\n#define \xe2\x89\xa0 !=\n#define \xc2\xab <<\n#define \xc2\xbb >>\n\n/* uniq: remove duplicate lines from stdin */\nint main() {\n std::string s;\n std::string t = "";\n while (cin \xc2\xbb s) {\n if (s \xe2\x89\xa0 t)\n cout \xc2\xab s;\n t = s;\n }\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n到底是怎么回事?这些宏名称不应该与 一起使用吗-fextended-identifiers?
G++ 还不支持源代码中的 Unicode 字符:
\n\n\n\n值得注意的是,您的程序生成的错误是针对 UTF-8 编码的各个八位字节,而不是针对它们表示的 Unicode 字符。 \xe2\x89\xa0被视为三个字节:\\342\\211\\240和\xc2\xab两个:\\302\\253。
C++ 标准要求(第 2.10 节):
\n\n\nidenti\xef\xac\x81er 是任意长的字母和数字序列。标识符中的每个通用字符名称应指定一个字符,其 ISO 10646 中的编码落入 E.1 中指定的范围之一。初始元素不应是指定其编码落入 E.2 中指定的范围之一的字符的通用字符名称。大写字母和小写字母是不同的。所有字符都很重要。
\n
和 E.1:
\n\n\n允许的字符范围
\n[charname.allowed]\n
\n- \n
00A8、00AA、00AD、00AF、00B2-00B5、00B7-00BA、00BC-00BE、00C0-00D6、00D8-00F6、00F8-00FF
\n- \n
0100-167F, 1681-180D, 180F-1FFF
\n- \n
200B-200D、202A-202E、203F-2040、2054、2060-206F
\n- \n
2070-218F、2460-24FF、2776-2793、2C00-2DFF、2E80-2FFF
\n- \n
3004-3007, 3021-302F, 3031-303F
\n- \n
3040-D7FF
\n- \n
F900-FD3D、FD40-FDCF、FDF0-FE44、FE47-FFFD
\n- \n
10000-1FFFD、20000-2FFFD、30000-3FFFD、40000-4FFFD、50000-5FFFD、\n60000-6FFFD、70000-7FFFD、80000-8FFFD、90000-9FFFD、A0000-AFFFD、\nB0000-BFFFD、C0 000-CFFFD, D0000-DFFFD、E0000-EFFFD\n0300-036F、1DC0-1DFF、20D0-20FF、FE20-FE2F
\n
您的尖括号是 0x300A 和 0x300B,不包括在内。不等于0x2260,也是不允许的。
\n| 归档时间: |
|
| 查看次数: |
5581 次 |
| 最近记录: |